我正在经历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'
(即引用参数).
'#' - 该参数被忽略,以及之后的任何参数.
大多数UNIX shell将#
(及其后的所有内容)视为注释字符.你的程序永远不会收到这些参数 - 它们被shell删除.
尝试./ex14 '#num53'
(即引用参数).