#include <stdio.h>
int main()
{
char c;
int i;
char A[20];
i = 0;
while ((c = getchar()) != EOF && c != '\n')
A[i++] = c;
A[i] = '\0';
printf("%s", A);
}
当数组类型为char
时,可以正确输出输入的字符,但是当把数组类型改为int
类型时
即int A[20],
程序只能输出输入的第一个字符并秒退,是什么原因导致的?
因为 printf
的 %s
格式期待 const char*
而不是 const int*
。
@小丸子 @JesseChen_LJ 解释的很对,我在多讲点
关于内存分配问题,int 4 字节,char 1 字节(本人的机器上)
int inta[4];
在内存中给数组inta分配 4 * 4 = 16 个字节,
while ((c = getchar()) != EOF && c != '\n')
A[i++] = c; // 输入 abcd ASCII 分别为 61H,62H,63H,64H
在完成赋值以后,内存情况变化
61 00 00 00
62 00 00 00
63 00 00 00
64 00 00 00
printf("%s", A);
%s , 从A数组首地址,开始逐个字节读取,遇到'0'(ASCII其实就是0)结束,所以只输出一个字符。
对于 char chara[5] ;内存情况,自开辟5个字节
61 62 63 64 00
所以会输出,abcd.
char是1字节的, int是4字节的。 %s
的打印是终止于\0
处, 如果将char
改成了int
后,在int中只有8位被使用了。
此时如果你将int类型的A[0]的byte打印出来,你会发现:(输入字符1)
31 00 00 00 //这是小端机器上的显示
后面的3个字节都是0,%s
即终止在这个地方,后面的就不会再打印了。