我試圖把一個整數值成一個字符數組,所以我可以有字節尋址存儲器。當我將要放置的整數和指向數組的字符指針傳入我的函數時,它們具有正確的值。賦值後,整數指針保持正確的值,但字符指針具有負值。這只是發生兩次十之和相同的兩個數字,每次.. 下面是函數數組c的值被否定有時
//Places an int into an array at memLocation
void PutIntAt(int i, char *arr)
{
printf("value: %i at: %i\n", i, arr - &mainMemory[0]);
int *pos = (int*)arr;
*pos = i;
printf("*pos is: %x *arr is: %x\n", *pos, *arr);
}
輸出我從這個我得到的一個片段
value: 150 at: 28
*pos is: 96 *arr is: ffffff96
value: 50 at: 32
*pos is: 32 *arr is: 32
value: 20 at: 36
*pos is: 14 *arr is: 14
value: 10 at: 40
*pos is: a *arr is: a
value: 5 at: 44
*pos is: 5 *arr is: 5
value: 500 at: 48
*pos is: 1f4 *arr is: fffffff4
location 48 = -12
我編譯使用gcc並使用-o
選項和-std=gnu99
選項。
的mainMemory
陣列是一個全局變量。不知道爲什麼會這樣。
問題:不知道爲什麼會發生這種情況...... A:也許是因爲arr和mainMemory都可能被定義爲char,並且任何有符號字符算術結果> = 128都會導致負數? – paulsm4
如果沒有看到其他代碼,很難看到問題出在哪裏。請發佈[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –
@ameyCU 當我聲明主存儲器I與這條線做靜態: 炭mainMemory [MEM_SIZE]; 其中MEM_SIZE是5000 @ paulsm4 我最初的想法是相同的,但是300的值在150之前得到了正確的轉換。 – jgleesti