我正在看Zed Shaw的“艰难学习C”(LCTHW),今天我要做的是exercise 14Exercise 14是一个简单的程序,它打印运行程序时给出的每个参数字符的ascii码。您可以查看我的代码here(请原谅随机评论;我使用此repo仅存储我的lcthw注释)。
我的程序没有完全按预期运行。我使用osx上的terminal调用程序,该程序工作得非常出色,直到我使用以“”开头的参数运行它时,该参数以及其后的任何参数都将被忽略。例如,在终端中运行以下命令:

./ex14 Hello Simon #num53 okay

将只为hello simon提供ascii代码,但不为num53或ok提供,即-
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 <stdio.h>
#include <ctype.h> // Functions to classify and transform chars
#include <string.h> // 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;
}

最佳答案

“35;”-该参数以及其后的任何参数都将被忽略。
大多数unix shell将#(以及其后的所有内容)视为注释字符。您的程序从不接收这些参数——它们被shell删除。
尝试./ex14 '#num53'(即引用参数)。

10-07 19:38
查看更多