C语言输入一个字符串 为什么遇到空格就输出了 为什么没有溢出

#include <stdio.h>
#include <string.h>
int main()
{
char str[20];
printf("input string:\n");
scanf("%s",str);
printf("%s",str);
return 0;
}
1、 为什么输入a b c(中间有空格)只能输出a了,怎么解决呢?
2、输入连续多个a(大于20个),为什么没有溢出?

(1) scanf函数就是冲缓存里面取字符串,遇到空格或换行符结束
解决方法就是:使用gets(str); 一次性读取缓存里面的字符串
(2) 你开辟的内存空间就20个char,就只能存储20个char了追问

我输入25个 依然正常运行你怎么解释呢

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-02
1、 为什么输入a b c(中间有空格)只能输出a了,怎么解决呢?
--如果碰到空格就认为碰到了第二个格式化的参数,例如:scanf("%d%d",&a,&b); 输入“2 3 4”,则a=2,b=3
2、输入连续多个a(大于20个),为什么没有溢出?
--由于程序太小,现在的内存太大,而且程序执行太短,此问题就变成了概率问题了
第2个回答  2014-12-02

     scanf("%s",str); 改为

      fgets(str, 20, stdin)

    已经写倒别的内存区了,只是在特定状态下没有发作而已

追问

我输入25个A 数组只有20啊,不应该报错吗?为什么依然正常运行?

追答

有可能运行出错,因为不知道其余5个char是什么.看这个:http://tieba.baidu.com/p/80255469的3楼回复。

有可能运行出错,因为不知道其余5个char是什么.看这个:http://tieba.baidu.com/p/80255469的3楼回复。

本回答被提问者采纳
第3个回答  2014-12-02
任何类型的数组,纯粹使用输出流是不可能把所有数据输出,也不会在输入流一次性把所有数据输入,简单点就是使用for循环输入输出,或者高级for循环输出,或者转换成字符串在一次输出。

C语言输入一个字符串 为什么遇到空格就输出了 为什么没有溢出
(2) 你开辟的内存空间就20个char,就只能存储20个char了

C语言输入一个字符串 为什么遇到空格就输出了 为什么没有溢出
所以你的c越界,只能说明是程序错误。这时候正好c[1]后面可以用,所以输出4个字符没有出问题,如果遇到c[1]后面不可用的情况,而你越界了,这个程序将会崩溃。

为什么C语言运行的时候,输入数值时各参数用空格分开可以运行,而不用空...
但是如果没有空格,scanf就认为你第一个变量的内容还没输入完,即使你输入“478回车”,因为有回车符,它也只会把478赋给第一个变量,而继续等待第二个变量的输入。如果你非要不输入空格就能正常运行,那只能写成scanf("%c%c%c",&a,&b,&c)这样了,然后再a-='0'这样把字符转成整型。

c语言问题,为什么空字符会以空格形式输出?应该是什么都不输出才对啊
以%c格式符输出'\\0'时,输出形式就是一个空格。例如:printf("ABC%cD",'\\0'); 就会输出ABC D 以%s格式输出字符串时,如果中间有'\\0',则输出到它的前一个字符为止。printf("ABC\\0D")或printf("%s","ABC\\0D"); 或puts("ABC\\0D"); 都是只会输出ABC。

C语言中fputs遇到空字符停止输出所以字符?
c语言中输出字符串的函数有printf("%s") puts() fputs()等,字符串中可以是任意的字符,包括空格在内,无特殊处理,如: char str[]="hello world" ;printf("%s\\n", str );puts(str);fputs(str,stdin); 但在输入带有空格的字符串时,只能用gets()或fgets(),而不能用scanf("%s") ,...

C语言当用户要求输入的字符串中含有空格时,应使用的输入函数是...
用gets()函数;gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。功能 从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串...

我准备用c语言输入字符数组,为什么我输入一个字母一打空格就成了汉字...
因为你可能是开着中文输入法才会这样。你先切换到英文输入法试试

c语言如何用for循环实现字符串中遇到空格就换行??
2014-05-24 C语言关于利用循环换行问题 1 2013-01-23 C语言求助,从键盘输入的字符中统计并输出空格的个数,用换行符... 2016-06-27 C语言开始FOR循环不用换行 2015-03-29 %d在遇到换行或空格等间隔符时会怎样在c语言中 2014-12-02 C语言输入一个字符串 为什么遇到空格就输出了 为什么没有溢出 1 ...

c语言输入一个字符如果是空格输出space
char str[101];gets(str);这个语句是输入字符串的,包括空格;printf(" ");这就是输出空格;当输出是'\\0'的时候结束;我也是新手 多多关照

c语言打字为什么会有空格呢
输入时误打空格,代码格式问题。1、输入时误打空格:这是最常见的原因,在输入代码时不小心在不应该的地方输入了空格。2、代码格式问题:有时候,即使代码中没有直接插入空格,格式问题导致输出中存在空格,例如,字符串中的某个字符后面有一个未初始化的变量或未初始化的内存位置,它会输出为空格。

相似回答