如果给出了一个很大的数字,如344565786464675345仍然得到输出,这是怎么可能的,因为char的范围是256,所以它不应该取大于那个数字,为什么char可以存储这么大的整数?
int main()
{
char b[30];
scanf("%s",b);
printf("\n%s",b);
return 0;
}
答案 0 :(得分:2)
char
和char
数组之间存在差异,这就是您所拥有的。
一个数组最多可以存储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个字符的字符串来生成有效的字符串。