计算的参数的长度
代码:计算的参数的长度
int my_strlen(char *string){
int i;
for(i = 0; string[i] != '\0'; i++);
return i;
}
int main(int argc, char* argv[]){
int length;
for(int i = 1; i < argc; i++){
length = my_strlen(argv[1]);
}
printf("Length of the command line args: %d\n", length);
}
输出:
$ ./a.out guy oneguy
$ Length of the command line args: 6
出于某种原因,它只能算最后的参数,而忽略了其他。我期待得到10(长度)。
任何帮助将是伟大的。
谢谢。
int length = 0; // Don't forget to initialize to 0.
for(int i = 0; i < argc; i++) { // Start from index 0, not 1, to loop through every argument.
length += my_strlen(argv[i]); // Use i as index to argv to access each argument one by one.
// Add result of my_strlen to length.
}
哦,我从1开始的原因,是因为第一个参数。例如,'$ ./a.out args1 args2 \ 0'所以第一个索引[0]是a.out,所以我忽略了它。所以我从索引1开始。 – user4533813 2015-02-05 16:56:02
@ user4533813哦,你是对的,完全忘了那个。那就是1。 – emlai 2015-02-05 17:01:12
点1.你永远不加入
length
以前的值到下一个值(一个或多个)。第2点。您从未初始化
length
。第3点。对于所有
i
的值,您使用的是argv[1]
而不是argv[i]
。第4点,输入
./a.out guy oneguy
,您将如何获得10
?
使用类似
length = 0; // initialize
和
length += my_strlen(argv[i]); // add up the length, use i as index.
PS - 我不认为二进制文件的名称应该算作命令行参数,所以从索引1这对我来说是正确的,但最后,这取决于你。 [这里没有对或错,根据_print声明] :-)
'strlen(“guy oneguy”)'是10. – mch 2015-02-05 16:52:32
@mch先生,但不是'strlen(“guy”)+ strlen(“oneguy”)'是我们在这里查看的情况,至少OP的逻辑? – 2015-02-05 16:56:43
@SouravGhosh我确实使用strlen来获得乐趣。我一直在得到9而不是10.我做了:'length + = strlen(argv [i]);'在forloop下主要。我将int长度更改为size_t长度。 – user4533813 2015-02-05 17:17:29
初始化'length'为零并改变'length = my_strlen(argv [i]);'to'length + = my_strlen (argv [i]);'也注意从'1'到'i'的变化。 – DaV 2015-02-05 16:29:37
“出于某种原因”?原因在于,这正是您在代码中表达的想法。 :) – unwind 2015-02-05 16:36:29
有什么理由你不使用'strlen'? – Axalo 2015-02-05 16:37:51