2011-09-14 150 views
0
#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)); 
} 

這工作得很好,當我在用箭頭標記(------->)行給小的數字,但對於大的值不起作用。我想存儲大數字。我該怎麼辦?C指針。大量Assignement爲char *指針

+0

請發表你的意思是一個「巨大的數字」什麼的代碼示例。 –

+0

的#include 的#include INT主() { \t字符* X =(字符*)malloc的(1024); \t *(x + 2)= 319222; // --------這不會工作。它說溢出問題。 012f\t printf(「\ n%d」,*(x + 2)); printf(「\ n%d」,sizeof(long int)); printf(「\ n%ld \ n \ n」,(long int)sizeof(long int)); } –

+0

你預計會發生什麼? 'char'只能保證值高達127(或255)。 –

回答

2

您正在分配一個char緩衝區。這樣一個數組的元素只能保證小數值,最多可達255.如果要存儲數值,請改用一些數值數組(例如longint,具體取決於期望值的實際大小)。例如。

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

Here可以檢查所有標量數據類型的限制中C.

+0

這樣的算術運算malloc caster應該用C++編程,而不是C – user411313

1

使用較大型,像intlong。在C中,char通常只有8位數量,將被限制在+/- 128的有效範圍內。

+0

Ya ..正是如此。我想在void *緩衝區中存儲大量數據,但不允許我進行像*(x + 2) –

+0

這樣的算術運算而且我必須做void * buffer only –

0

所有的緩衝區分配和指針算術都在妨礙理解。本質上,問題是,焦炭具有有限的範圍內,通常-127到128或0到255

看到你的問題最簡單的方法是這樣的代碼:

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

從你說的話在評論中,這聽起來像你想要將char *轉換爲int *並以這種方式寫入緩衝區。我希望你知道你在做什麼。

*(int*)x[2] = 666; 
+0

在哪個編譯器中不能編譯? gcc只會對第一項任務發出警告。 – bitmask

+0

@bitmask C真的讓你逃脫謀殺! –

+0

C是無政府狀態!這就是C的美麗 – bitmask