2015-02-05 76 views
-1

代码:计算的参数的长度

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(长度)。

任何帮助将是伟大的。

谢谢。

+1

初始化'length'为零并改变'length = my_strlen(argv [i]);'to'length + = my_strlen (argv [i]);'也注意从'1'到'i'的变化。 – DaV 2015-02-05 16:29:37

+0

“出于某种原因”?原因在于,这正是您在代码中表达的想法。 :) – unwind 2015-02-05 16:36:29

+0

有什么理由你不使用'strlen'? – Axalo 2015-02-05 16:37:51

回答

0
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. 
} 
+0

哦,我从1开始的原因,是因为第一个参数。例如,'$ ./a.out args1 args2 \ 0'所以第一个索引[0]是a.out,所以我忽略了它。所以我从索引1开始。 – user4533813 2015-02-05 16:56:02

+0

@ user4533813哦,你是对的,完全忘了那个。那就是1。 – emlai 2015-02-05 17:01:12

0
  • 点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声明] :-)

+0

'strlen(“guy oneguy”)'是10. – mch 2015-02-05 16:52:32

+0

@mch先生,但不是'strlen(“guy”)+ strlen(“oneguy”)'是我们在这里查看的情况,至少OP的逻辑? – 2015-02-05 16:56:43

+0

@SouravGhosh我确实使用strlen来获得乐趣。我一直在得到9而不是10.我做了:'length + = strlen(argv [i]);'在forloop下主要。我将int长度更改为size_t长度。 – user4533813 2015-02-05 17:17:29