C 不使用strlen()函数计算字符串长度

C 不使用strlen()函数计算字符串长度,c,string,string-length,null-character,C,String,String Length,Null Character,对一个非常简单的C代码有疑问。我编写了一个代码来计算字符串的长度,而不使用strlen函数。如果我输入的字符串之间没有空格,下面的代码将正常工作。但是如果我输入一个类似“My name is---”的字符串,则显示的长度是第一个空格前单词的长度,在本例中,该空格为2。为什么呢?空格和空字符不是两个不同的字符吗?请指导我如何更改代码,以便返回整个字符串长度 char s[1000]; int length = 0; printf ("Enter string : "); scanf ("%s",

对一个非常简单的C代码有疑问。我编写了一个代码来计算字符串的长度,而不使用strlen函数。如果我输入的字符串之间没有空格,下面的代码将正常工作。但是如果我输入一个类似“My name is---”的字符串,则显示的长度是第一个空格前单词的长度,在本例中,该空格为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);

这是因为带有
%s
scanf
会一直读取,直到找到空白

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

如果您想一直读到
\n
包括空格,您可以执行以下操作

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

或者您可以使用
fgets

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;
}
#包括
int main(){
chars[100];
printf(“输入字符串:”);
fgets(s、sizeof(s)、stdin);
printf(“\n字符串长度=%d”,printf(“%s”),s);
返回0;
}

因为
scanf
读取字符串,直到它到达空格。因此,在这种情况下,您的
s
将只有
My
检查scanf读取的内容。