C中char数组的长度

时间:2014-11-14 13:47:21

标签: c string

我想使用while循环计算C中char数组的长度。 但如果我插入otto,则返回5的长度。不应该是4正确答案吗?

char eingabe[255];

printf("geben Sie eine Zeile ein:");
fgets(eingabe, 255, stdin);

int i = 0;
while (eingabe[i] != '\0')
{
    ++i;
}

printf("Laenge: %d\n", i);

4 个答案:

答案 0 :(得分:8)

eingabe很可能包含:

{ 'o', 't', 't', 'o', '\n', '\0', junk ... }

答案 1 :(得分:7)

检查fgets()的{​​{3}}。

  

在EOF或换行符后停止阅读。如果读取换行符,则将其存储到缓冲区中。

当您从stdin阅读时,它会在提供的缓冲区中存储尾随的newline [{1}}]字符。

将支票更改为\n。希望这能解决你的问题。

答案 2 :(得分:1)

换行符'\n'使fgets停止读取,但它被函数视为有效字符,并包含在复制到结果的字符串中。如果您想避免这种情况,请使用fscanf,如下所示:

fscanf(stdin, "%254[^\n]", eingabe);

请注意格式的限制:它小于缓冲区的实际长度以容纳空终止符。

注意:您可以使用strlen来计算字符串的长度。它与您的for循环完全相同:

int i = strlen(eingabe);

答案 3 :(得分:0)

eingabe的大小为255.现在,如果您想要其中的初始化字符数,则应使用strlen。但首先,插入此代码:

int n;
for(n = 0; n < 255; n++){
  if(eingabe[n] == '\n'){
    eingabe[n] = '\0';
  }
}
eingabe[254] = '\0';

此代码用NULL字符替换'\ n'字符。如果没有这个,strlen将返回错误的值。我还包括eingabe[254] = '\0';,这样如果读入的字符串足够长,以至于换行符不适合缓冲区,那么仍然有一个NULL字符,以便strlen可以正常运行