【问题标题】:Calculate the length of the arguments计算参数的长度
【发布时间】:2015-02-05 16:28:03
【问题描述】:

代码:

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

任何帮助都会很棒。

谢谢。

【问题讨论】:

  • length 初始化为零并将length = my_strlen(argv[i]); 更改为length += my_strlen(argv[i]); 还要注意从1i 的更改。
  • “出于某种原因”?原因是这正​​是您在代码中表达的意思。 :)
  • 你有什么理由不使用strlen
  • @Axalo 完全没有理由。我只是想尝试另一种方式,只是为了练习。我知道 strlen 函数存在。
  • @user4533813 真实的更好,因为它使用了const char *size_t。你也没有理由不能这样做...... :)

标签: c string for-loop


【解决方案1】:
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 哦,你是对的,完全忘记了这一点。 1 就是这样。
【解决方案2】:
  • 第 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.

P.S - 我不认为二进制文件的名称应该算作命令行参数,所以从索引 1 开始对我来说似乎是正确的,但最后,这取决于你。 [这里没有对错,个人喜好,基于_print声明]:-)

【讨论】:

  • strlen("guy oneguy") 是 10。
  • @mch 先生,但strlen("guy") + strlen("oneguy") 不是我们在这里看到的情况,至少按照 OP 的逻辑吗?
  • @SouravGhosh 我确实使用 strlen 来取乐。我一直得到 9 而不是 10。我做到了:length += strlen(argv[i]); 在 main 下的 forloop 中。我将 int 长度更改为 size_t 长度。
  • 这只是一个提示,为什么有人会认为结果应该是 10。你说得对,程序不能这样工作。 @user4533813 9 是正确答案,因为空格将被删除,你会得到没有空格的“guy”和“oneguy”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
  • 2012-11-02
  • 1970-01-01
  • 2018-04-21
  • 2017-09-18
  • 2011-06-07
相关资源
最近更新 更多