我遇到了一件棘手的事情。这是原始程序:
#include <stdio.h>
int main(int argc, char *argv[])
{
// go through each string in argv
int i = 0;
while(i < argc) {
printf("arg %d: %s\n", i, argv[i]);
i++;
}
// let's make our own array of strings
char *states[] = {"cali","heo","arb","flu"};
int num_states = 4;
i = 0; // watch for this
while(i < num_states) {
printf("state %d: %s\n", i, states[i]);
i++;
}
return 0;
}
以下是链接中提出的问题:http: //c.learncodethehardway.org/book/ex11.html
通过使用 i-- 从 argc 开始倒数到 0,使这些循环倒数。您可能需要做一些数学运算才能使数组索引正常工作。
针对上面提到的这个问题,我对上面的程序进行了修改。在下面的代码中,我只能执行 1 个 while 循环。我无法执行这两个循环。请纠正我的代码。
我使用valgrind
了调试工具。
#include <stdio.h>
int main(int argc, char *argv[])
{
int i = 2;
while(i < argc) {
printf("arg %d: %s\n", i, argv[i]);
i--;
}
char *states[] = {
"cali","heo","arb","flu"
};
int num_states = 4;
i = 3; // watch for this
while(i < num_states) {
printf("state %d: %s\n", i, states[i]);
i--;
}
return 0;
}
输出:
$ make while
$ ./while hey how
2 how
1 hey
0 ./while
Segmentation fault (core dumped)
$
而对于另一种输出方式——
$ ./while
3 flu
2 arb
1 heo
0 cali
Segmentation fault (core dumped)
$
因此,我声称我“无法以上述方式同时执行两个 while 循环”。我已经初始化i=2
并且它被递减并且我已经将i
值重新初始化为 3。