为什么以下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
谁能请解释.
您似乎在格式字符串中使用了a 5而不是a .(也许键盘的换档键需要清洁.)%scanf
这意味着scanf实际上并没有在缓冲区中读取任何内容.您的代码不会检查scanf(它应该!)的返回值,因此从不会注意到它失败了.所以你接着试图计算一个充满未初始化垃圾的缓冲区的长度.它可以给你432,或0,或任何其他东西.
[编辑补充:] ......哦.即使你修复了它,它仍然无法工作,因为scanf当它看到一个空白字符(包括换行符)时会停止读取,因此\n你的get_length函数正在寻找不会在缓冲区中.
顺便提一下,你知道strlenC标准库中的功能吗?