C指针问题!

sta*_*ion 1 c

为什么以下C代码不输出10

#include<stdio.h>
#include<stdlib.h>
void get_length(char s[]);
int main( ) 
{
char buff[128];
printf("\nEnter buffer data: ");
scanf("%s",buff);
get_length(buff);
}

void get_length(char *s){
    int count;  
for(count = 0 ; *s != '\0' ; s++)
    count++;
printf("count = %d\n",count);
}
Run Code Online (Sandbox Code Playgroud)

输入是我罗希特
输出是
数= 432
谁能请解释.

Gar*_*han 5

您似乎在格式字符串中使用了a 5而不是a .(也许键盘的换档键需要清洁.)%scanf

这意味着scanf实际上并没有在缓冲区中读取任何内容.您的代码不会检查scanf(它应该!)的返回值,因此从不会注意到它失败了.所以你接着试图计算一个充满未初始化垃圾的缓冲区的长度.它可以给你432,或0,或任何其他东西.

[编辑补充:] ......哦.即使你修复了它,它仍然无法工作,因为scanf当它看到一个空白字符(包括换行符)时会停止读取,因此\n你的get_length函数正在寻找不会在缓冲区中.

顺便提一下,你知道strlenC标准库中的功能吗?