所以我决定学习C并用艰难的方式学习c。无论如何,我尝试编辑其中一个示例,输出不是我预期的结果。我从命令行调用程序作为e14 asd“应该”打印: 'e'== 101 'a'== 97 's'== 115 'd'== 100
但是,它根本不打印'd'行。我的代码是:
#include <stdio.h>
#include <ctype.h>
void print_letters(int argc, char *arg[])
{
int i = 0;
int j = 0;
for(j = 0; j < argc; j++) {
for(i = 0; arg[i] != '\0'; i++) {
char ch = arg[j][i];
printf("j is %d and i is %d\n", j, i);
if(isalpha(ch) || isblank(ch)) {
printf("'%c' == %d \n", ch, ch);
}
}
printf("\n");
}
}
int main(int argc, char *argv[])
{
print_letters(argc, argv);
return 0;
}
我假设问题与argv部分有关,但在环顾四周之后,我仍然不知道究竟是什么导致'd'没有出现。
如果有人能向我解释,我们将不胜感激。
谢谢!
答案 0 :(得分:10)
for(i = 0; arg[i] != '\0'; i++) {
应该是
for(i = 0; arg[j][i] != '\0'; i++) {
// ^^^
循环退出条件应该迭代单个命令行参数的字符,但实际上是遍历参数。
答案 1 :(得分:0)
在使用命令行参数之前,您应该知道argc
计算参数的数量,而argv
是用于存储参数的2-d数组。在这种情况下,例如,如果exe文件名是main.exe
并且您在命令行中键入main.exe asd
,则参数的值应为:argc == 2
,argv[0] == 'main.exe'
和{ {1}}。有关命令行参数用法的更多详细信息,请参阅Parsing C Command-Line Arguments