C中的数据类型(char)

时间:2016-08-03 15:01:27

标签: c

如果给出了一个很大的数字,如344565786464675345仍然得到输出,这是怎么可能的,因为char的范围是256,所以它不应该取大于那个数字,为​​什么char可以存储这么大的整数?

int main()
{
    char b[30];
    scanf("%s",b);
    printf("\n%s",b);
    return 0;
}

3 个答案:

答案 0 :(得分:2)

charchar数组之间存在差异,这就是您所拥有的。

一个数组最多可以存储29个数字加上空终止符,但是你输入的值是而不是存储为一个大整数。相反,它存储为一系列字符,其中每个字符代表一个数字:

Index of b[]  0   1   2   3   4   5   6   7   8  ...
char value   '3' '4' '4' '5' '6' '5' '7' '8' '6' ...
num value     51  52  52  53  52  53  54  55  54 ...

所有字符都包含可由单个char表示的数值。

答案 1 :(得分:1)

你拥有的是30 char的数组而不是char -

char b[30];   //b is an array of char 

所以b的大小为30*sizeof(char)。这意味着它可以保留30个字符(包括'\0')。您的输入存储在此字符数组中(足以提供输入),因此您可以获得正确的输出。

答案 2 :(得分:1)

char b[30];

b是一个数组,最多可存储30个字符。

作为对

的回应
scanf("%s",b);

您输入了18个字符

344565786464675345 

由于\0说明符共有19个字符,因此已将空字符%s附加到您输入的内容。或者

b[18]='\0' // Remember the count starts from 0

所以你的数组b中仍有11个空闲字节,因为字符是1个字节。

请注意,如果你尝试在数组中存储一个字符串,那么该数组将被终止,即你需要在一个字符数组的末尾有一个\0,以便该组成为被认为是一个字符串。

因此,从技术上讲,您可以使用char b[30]使用最多29个字符的字符串来生成有效的字符串。