首页 > C语言字符串与数组问题

C语言字符串与数组问题

#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即终止在这个地方,后面的就不会再打印了。

【热门文章】
【热门文章】