为什么我不能得到整个字符串的长度?

我试过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);