С указателями.Присвоение больших чисел указателям char * - PullRequest
0 голосов
/ 14 сентября 2011
#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 ]

2 голосов
/ 14 сентября 2011

Вы выделяете буфер char. Элементы такого массива гарантированно содержат только небольшие значения, не более 255. Если вы хотите хранить числовые значения, используйте вместо этого некоторый числовой массив (например, long или int, в зависимости от того, насколько велики желаемые значения на самом деле). Э.Г.

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

Здесь вы можете проверить ограничения для всех скалярных типов данных в C.

1 голос
/ 14 сентября 2011

Используйте больший тип, например int или long.В C char обычно представляет собой только 8-битную величину, которая будет ограничена допустимым диапазоном +/- 128.

0 голосов
/ 14 сентября 2011

Вся арифметика распределения буфера и указателя мешает пониманию. По сути, проблема в том, что у char ограниченный диапазон, обычно от -127 до 128 или от 0 до 255.

Самый простой способ увидеть вашу проблему с помощью такого кода:

char c = 256;//no good
int i = 256;//no problem

Из того, что вы сказали в комментариях, звучит так, как будто вы хотите привести char * к int * и таким образом записать в буфер. Я надеюсь, что вы знаете, что делаете.

*(int*)x[2] = 666;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...