不使用strlen()函数即可计算字符串的长度

时间:2018-10-06 18:06:24

标签: c string string-length null-character

对于非常简单的C代码有疑问。我编写了一个代码来计算字符串的长度,而无需使用strlen函数。如果我输入的字符串之间没有空格,则下面的代码可以正常工作。但是,如果我输入“我的名字是---”之类的字符串,则显示的长度就是第一个空格之前的单词的长度,在示例中为2。为什么?空格和空字符不是两个不同的字符吗?请指导我如何更改代码,以便返回整个字符串长度?

char s[1000];
int length = 0;
printf ("Enter string : ");
scanf ("%s", s);
for (int i = 0; s[i] != '\0'; i++)
  {
    length++;
  }
printf ("Length of given string : %d", length);

2 个答案:

答案 0 :(得分:2)

这是因为scanf%s一直读取直到找到空白为止。

来自man scanf

  

匹配一系列非空格字符;下一个指针   必须是足以容纳字符的字符数组的指针   输入序列和终止的空字节('\ 0'),已添加   自动。输入字符串停在空白处或最大处   字段宽度,以先到者为准。

如果您想读到\n(包括空白),可以执行以下操作。

scanf("%999[^\n]", s);

或者您可以使用fgets

答案 1 :(得分:-2)

scanf读取数据,直到“ \ 0”或“ \ 20”为止。因此,请使用“ fgets”方法读取数据,直到带有“ stdin”的“ \ n”(下一行)为止,

示例程序:

#include <stdio.h>

int main() {

    char s[100];
    printf("Input String: ");
    fgets(s, sizeof(s), stdin);
    printf("\nLength of the string is = %d", printf("%s"), s);
    return 0;
}