#include <stdio.h>
int main()
{
char s;
scanf("%s",&s);
printf("input word is:%s\n",&s);
return 0;
}
代码如上,我一直以为s里应该只能放一个字母吧,可实验的时候发现最多可以放四个,比如输入aaaa,而程序一切正常,然后到5个字母的话程序就崩溃了。请问这是为什么呢。机子是32位的,是不是有什么关系。
输入 字符串的是候应该 定义 字符数组 数组名代表 首地址, 接收是用数组名 即:scanf("%s",s);
而你程序里 scanf("%s",&s); 所以是可以接收的
而 输出字符串的时候 是以 '\0' 为结束标记的 也是 , 输出字符串是 也是用 数组名 即:printf("%s",s);
而你程序里 也给的是 地址 所以 是可以输出的
我在dev 里试的
啊 明白了
另外,这么看字符串也能放进字符变量里?而且这个时候一个字母只要两位就能表示了啊?
printf("input word is:%s\n",&s);
这句话也就是在打印一个字符串。
你说的问题其实也牵扯到一个内存中存储的问题了,其实你已经越界了,字符只能存储一个字节的数据,你却输入一个字符串,那么之后的数据就存储在了s后面的位置了。
我改成如下代码
#include
int main()
{
char s;
char a = 'a';
scanf("%s",&s);
printf("input word is:%s, %c\n",&s, a);
return 0;
}
然后输入abcde,发现a的值被改成b了。理解了么?