C语言中的数据类型(char)
如果输入是一个像34456578646467675345这样的大数字,我仍然可以得到输出,这是怎么可能的,因为char的范围是256,所以它不应该接受比这个大的数字,为什么char可以存储这么大的整数C语言中的数据类型(char),c,C,如果输入是一个像34456578646467675345这样的大数字,我仍然可以得到输出,这是怎么可能的,因为char的范围是256,所以它不应该接受比这个大的数字,为什么char可以存储这么大的整数 int main() { char b[30]; scanf("%s",b); printf("\n%s",b); return 0; } 您拥有的是一个由30char组成的数组,而不是一个char- char b[30]; //b is an array o
int main()
{
char b[30];
scanf("%s",b);
printf("\n%s",b);
return 0;
}
您拥有的是一个由
30
char
组成的数组,而不是一个char
-
char b[30]; //b is an array of char
所以
b
的大小是30*sizeof(char)
。这意味着它可以容纳30个字符(包括'\0'
)。您的输入存储在此字符数组中(足够提供输入),因此,您可以获得正确的输出 您拥有的是一个由30
char
组成的数组,而不是一个char
-
char b[30]; //b is an array of char
char b[30];
所以b
的大小是30*sizeof(char)
。这意味着它可以容纳30个字符(包括'\0'
)。您的输入存储在此字符数组中(足够提供输入),因此,您可以获得正确的输出
char b[30];
b是一个数组,最多可以存储30个字符
作为对
scanf("%s",b);
您已经输入了18个字符
344565786464675345
由于%s
说明符总共包含19个字符,因此在您输入的内容后面追加了一个空字符\0
。或
b[18]='\0' // Remember the count starts from 0
因此,在数组b
中仍然有11个可用字节,因为字符是1个字节
请注意,如果您试图在数组中存储字符串,那么该数组将以null结尾,即需要在字符数组的末尾有一个\0
,才能将该组视为字符串
因此,从技术上讲,您可以使用char b[30]
获得最多29个字符的字符串,使其成为有效字符串
b是一个数组,最多可以存储30个字符
作为对
scanf("%s",b);
您已经输入了18个字符
344565786464675345
由于%s
说明符总共包含19个字符,因此在您输入的内容后面追加了一个空字符\0
。或
b[18]='\0' // Remember the count starts from 0
因此,在数组b
中仍然有11个可用字节,因为字符是1个字节
请注意,如果您试图在数组中存储字符串,那么该数组将以null结尾,即需要在字符数组的末尾有一个\0
,才能将该组视为字符串
因此,从技术上讲,您可以使用
char b[30]
使一个最多29个字符的字符串成为有效字符串。char和char
数组之间存在差异,这就是您所拥有的
数组最多可以存储29位数字加上null终止符,但您输入的值不能存储为大整数。相反,它存储为一个字符序列,其中每个字符表示一个数字:
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
表示char
和char
数组之间存在差异,这就是您所拥有的
数组最多可以存储29位数字加上null终止符,但您输入的值不能存储为大整数。相反,它存储为一个字符序列,其中每个字符表示一个数字:
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
表示。您输入的是字符串,而不是图表。这里有两个为处理大数字而构建的成熟库()。在重新发明轮子之前,也许你想研究一下GMP之类的东西。因为在这个问题之后(你得到了一个大整数),你可能会发现自己在问如何进行减法、加法或乘法……你输入的是一个字符串,而不是一张图表。这里有几个为处理大数字而构建的成熟库()。在重新发明轮子之前,也许你想研究一下GMP之类的东西。因为在这个问题之后(你得到一个大整数),你可能会发现自己在问如何进行减法、加法或乘法……如果B是一个小于10^250的整数,我们可以将这个整数存储为char str[256]@ameyCU@AryamanTodkar最多10^250
(251
位)的数字可以存储在char str[256]中
。如果B是小于10^250的整数,我们可以将该整数存储为char str[256]@ameyCU@AryamanTodkar最多10^250
(251
位)的数字可以存储在char str[256]
中。如果B是小于10^250的整数,我们可以将该整数存储为char str[256]@dasblinkenlight@AryamanTodkar对即使我们使用char
s来表示它的十进制数字,我们也可以这样存储它。谢谢,我得到了它@dasblinkenlight@AryamanTodkar如果我们使用base-256表示,我们可以在104字节中存储10^250,而不是256字节。@AryamanTodkar欢迎您!如果您不再需要帮助解决问题,请考虑通过单击旁边的灰色复选标记来接受答案。这会让其他网站访问者知道您的问题已经解决,也会为您赢得一个全新的堆栈溢出徽章。如果B是小于10^250的整数,我们可以将此整数存储为char str[256]@dasblinkenlight@AryamanTodkar对即使我们使用char
s来表示它的十进制数字,我们也可以这样存储它。谢谢,我得到了它@dasblinkenlight@AryamanTodkar如果我们使用base-256表示,我们可以在104字节中存储10^250,而不是256字节。@AryamanTodkar欢迎您!如果您不再需要帮助解决问题,请考虑通过单击旁边的灰色复选标记来接受答案。这会让其他网站访问者知道您的问题已经解决,也会为您赢得一个全新的堆栈溢出徽章。如果B是小于10^250的整数,我们可以将该整数存储为char str[256]@sjsam吗?您没有在此处存储该整数;您正在存储一个字符串。请注意,您可以在单个字符中存储从零到255的任何整数的精确表示,在两个字符中存储范围(065535)中的任何整数,依此类推