【发布时间】:2016-04-08 04:04:32
【问题描述】:
所以我有这个分配(输入一个字符串,它将显示字符串的数量),我必须解释为什么 argv[0] 值和 argv[3] 值会发生变化。因此,当您逐步执行程序时(我的字符串输入是“run how now brown cow”,argv[0] 从我的目录文件夹开始(“/home/013/w/wn/%$%$%#%/Assignment4/ p2")。然后 argv[3] 以“now”开头。我不明白为什么这些变量在程序运行时会发生变化,因为“now”字符串应该在 argv[2] 中,对吧?每当我的程序编译出来的argv[]数组,最后什么都对应,为什么不是开头呢?
代码如下:
#include <stdio.h>
/* print a given string and a number in a pre-determined format. */
void
print_string(int num, char* string)
{
printf("String '%d' - '%s'\n", num, string);
}
int
main(int argc, char* argv[])
{
int i;
/* check for command line arguments */
if (argc < 2) { /* 2 - 1 for program name (argv[0]) and one for a param. */
printf("Usage: %s [<string> ...]\n", argv[0]);
return(1);
}
/* loop over all strings, print them one by one */
for (argc--,argv++,i=0 ; argc > 0; argc--,argv++,i++) {
print_string(i, argv[0]); /* function call */
}
printf("Total number of strings: %d\n", i);
return 0;
}
【问题讨论】:
-
argv[0]是用于调用程序的文件名,实际的命令行参数存储在argv[1...] -
@BenVoigt 打败了我
-
程序运行时它们会发生变化,因为您实际上修改了参数 (
argc--,argv++),这是一种通常不受欢迎的样式。 -
字符串没有改变......你正在改变你自己指向它们的指针(你正在推进开始指向 argv[0] 的指针,然后在 argv++ 之后它指向 argv[ 1]等)正如@BenVoight所说,这是一种令人困惑的风格。通常,您会想要做类似
for (int i = 0; i < argc; ++i) { /* do something with argv[i] */ } -
是的,当我看到 for 循环的结构时感觉很奇怪。我猜教授只是想迷惑我们哈哈。谢谢大家!