为什么我的程序在#之后忽略了参数?

 超可爱萌地1983 发布于 2023-02-07 11:40

我正在经历Zed Shaw的"艰难学习C"(LCTHW),今天我正在练习14.练习14是一个简单的程序,它打印运行程序时给出的每个参数的字符的ASCII代码.你可以在这里查看我的代码(请原谅随机评论;我只使用这个回购来存储我的LCTHW笔记).

我的程序没有完全按预期运行.我在OSX上使用Terminal调用该程序,并且程序运行得非常好,直到我使用以'#'开头的参数运行它 - 该参数被忽略,以及之后的任何参数.例如,在终端中运行以下命令:

./ex14 Hello Simon #num53 okay 

将仅为Hello Simon提供ASCII代码,但不为#num53或okay提供,即 -

LCTHW-sols $ ./ex14 Hello Simon #num53 okay
Hello has 5 chars
'H' == 72 'e' == 101 'l' == 108 'l' == 108 'o' == 111 
--------------
Simon has 5 chars
'S' == 83 'i' == 105 'm' == 109 'o' == 111 'n' == 110 
--------------

为什么是这样?此外,如何更改我的代码以便接受任何参数?

ex14.c在下面复制,没有我的笔记评论 -

#include 
#include  // Functions to classify and transform chars
#include  // for strlen()

void print_letters(char arg[]);

void print_arguments(int argc, char *argv[])
{
        int i = 0;

        for(i = 1; i < argc; i++) { 
                 print_letters(argv[i]);
        }
} // end print_arguments

void print_letters(char arg[])
{
        printf("%s has %lu chars\n", arg, strlen(arg));
        int i = 0;
        for(i = 0; arg[i] != '\0'; i++) {
                char ch = arg[i];

                // Shouldn't differ the print_arguments loop
                if(isalpha(ch) || isblank(ch) || isdigit(ch)) {
                        printf("'%c' == %d ", ch, ch);
                }
        }

        printf("\n--------------\n");
}

int main(int argc, char *argv[])
{
        print_arguments(argc, argv);
        return 0;
}

Employed Rus.. 8

'#' - 该参数被忽略,以及之后的任何参数.

大多数UNIX shell将#(及其后的所有内容)视为注释字符.你的程序永远不会收到这些参数 - 它们被shell删除.

尝试./ex14 '#num53'(即引用参数).

1 个回答
  • '#' - 该参数被忽略,以及之后的任何参数.

    大多数UNIX shell将#(及其后的所有内容)视为注释字符.你的程序永远不会收到这些参数 - 它们被shell删除.

    尝试./ex14 '#num53'(即引用参数).

    2023-02-07 11:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有