为什么我不能得到整个字符串的长度?
我试过strlen(字符串)。 我尝试编写代码来查找整个字符串的长度。 然而,当达到第一个“空间”时,它仍然倾向于停止计算长度。 为什么会这样? 解决办法是什么? 我试图停在’\ 0’。 这不应该工作吗? 这是代码的一部分。
int main(void) { char phrase[256]; char phrase2[256]; int i,j,size; scanf("%255s", phrase); for(i=0;phrase[i]!='\0';i++){ size++; } ...
它停止计数的原因是因为scanf一次读取一个字。 它正在读取第一个单词然后停止,忽略其余部分。
相反,使用fgets :
从流中读取字符并将它们作为C字符串存储到str中,直到读取(num-1)个字符或者到达换行符或文件结尾,以先发生者为准。
你可以从标准输入读取如下:
fgets(phrase, 256, stdin);
您是否考虑过使用strlen来测量输入的长度?
最后,你应该养成在声明变量时初始化变量的习惯:
int i = 0,j = 0, size = 0;
声明变量时,其值为“内存中的任何内容”,直到设置其值。 在您的示例中,“length”从未初始化,这将导致意外行为。 初始化变量是避免意外行为和浪费时间来追踪错误的好方法。
Scanf() function
不占空间。 每当出现空间时,它会将其视为输入的结尾并将’\ 0’置于该位置。
你可以做一件事:
scanf("%[^\n]s",phrase);
这个scanf将输入直到换行,即你输入:)
在您的代码中,第二件重要的事情是,您尚未将大小初始化为0。
这是解决方案:
int main(void) { char phrase[256]; char phrase2[256]; int i,j,size=0; //initialize size scanf("%[^\n]s",phrase); //input taken till '\n' for(i=0;phrase[i]!='\0';i++) { size++; } }
然而,当达到第一个“空间”时,它仍然倾向于停止计算长度。
嗯,这是scanf
的默认行为。 您可以使用fgets
来解决问题。 此外,未初始化添加注释size
sscanf
在第一个空格字符处停止。 这是man scanf
关于字段宽度说明符的片段。
可选的十进制整数,指定最大字段宽度。 当达到此最大值或找到不匹配的字符时(无论哪个先发生),读取字符都会停止。
如果您想阅读整行,请使用fgets
fgets(phrase, 255, stdin);
%s使用单词(由一个或多个空格分隔),您可以使用消耗字符的%c。
#include #include int main(void) { char phrase[256]; int size; scanf("%255c", phrase); size = strlen(phrase) - 1; /* -1 is for EOL */ printf("length is %d\n", size); }
scanf()
函数一次只能读取一个字。 您可以将代码更改为
scanf("%255[\n]s",phrase);