#include "stdio.h"
#include "malloc.h"
int main()
{
char*x=(char*)malloc(1024);
*(x+2)=3; -----------------------------> Problem with big numbers
printf("\n%d",*(x+2));
printf("\n%d",sizeof(long int));
printf("\n %ld \n\n",(long int)sizeof(long int));
}
当我在标有箭头(------->
)的行中给出小数字时,这样可以正常工作,但对大值不起作用。我想存储大数字。我该怎么办?
答案 0 :(得分:2)
您正在分配char
缓冲区。这种数组的元素只保证保存较小的值,最多不超过255.如果要存储数值,请使用一些数字数组(例如long
或int
,具体取决于方式实际上大的期望值是)。 E.g。
long* x = (long*)malloc(1024 * sizeof(long));
x[2] = 319222; // x[2] is equivalent to *(x+2)
Here您可以检查C中所有标量数据类型的限制。
答案 1 :(得分:1)
使用较大的类型,例如int
或long
。在C中,char
通常只有8位数量,限制在+/- 128的有效范围内。
答案 2 :(得分:0)
所有缓冲区分配和指针算法都妨碍了解。基本上问题是char的范围有限,通常为-127到128或0到255。
查看问题的最简单方法是使用以下代码:
char c = 256;//no good
int i = 256;//no problem
根据你在评论中所说的,听起来你想将char *转换为int *并以这种方式写入缓冲区。我希望你知道你在做什么。
*(int*)x[2] = 666;