-2

对非常简单的 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);
4

2 回答 2

2

这是因为scanfwith%s读取直到找到空白。

来自man scanf

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

如果您想阅读直到\n包含空白,您可以执行以下操作。

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

或者你可以使用fgets.

于 2018-10-06T18:13:06.597 回答
-2

scanf 读取数据直到 "\0" 或 "\20"。所以使用“fgets”方法读取数据直到“\n”(下一行)和“stdin”,

示例程序:

#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;
}
于 2018-10-06T19:44:08.107 回答