C指针。将大数字分配给char *指针

时间:2011-09-14 16:41:04

标签: c pointers

#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));
}

当我在标有箭头(------->)的行中给出小数字时,这样可以正常工作,但对大值不起作用。我想存储大数字。我该怎么办?

3 个答案:

答案 0 :(得分:2)

您正在分配char缓冲区。这种数组的元素只保证保存较小的值,最多不超过255.如果要存储数值,请使用一些数字数组(例如longint,具体取决于方式实际上大的期望值是)。 E.g。

long* x = (long*)malloc(1024 * sizeof(long));
x[2] = 319222; // x[2] is equivalent to *(x+2)

Here您可以检查C中所有标量数据类型的限制。

答案 1 :(得分:1)

使用较大的类型,例如intlong。在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;