C 不使用strlen()函数计算字符串长度
对一个非常简单的C代码有疑问。我编写了一个代码来计算字符串的长度,而不使用strlen函数。如果我输入的字符串之间没有空格,下面的代码将正常工作。但是如果我输入一个类似“My name is---”的字符串,则显示的长度是第一个空格前单词的长度,在本例中,该空格为2。为什么呢?空格和空字符不是两个不同的字符吗?请指导我如何更改代码,以便返回整个字符串长度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",
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读取的内容。