2016-03-12 58 views
0

我已經分配了一塊內存(char *),我希望能夠存儲一個整數。將int值存儲到char * - C++?

char * arr = new char[50]; 
int num = 9; 

for(int i = 0; i < sizeof(int); i++) 
{ 
     *((int *)arr) = arr[i]; 
} 

memcpy(&arr, &num, sizeof(num)); 

cout<<"Contents of arr: "<<arr<<endl;  

但是,無論何時編譯,我似乎都會遇到分段錯誤。我怎樣才能解決這個問題?謝謝!

+0

我想我需要將這些(char *)字節先轉換爲int字節,才能將int寫入該內存塊,但我猜測這是錯誤的。 – user5620123

+0

您的代碼存在多個問題。你爲什麼從0迭代到'sizeof(int)'?你爲什麼要將值_from_'arr'複製回'arr'?你在循環的右括號中有一個語法錯誤 - '''代替'}'。根據「[如何提出問題](http://stackoverflow.com/help/how-to-ask)」中的要求,代碼必須正確。 – Tony

回答

1

for循環是不必要的。我不確定它試圖完成什麼。 memcpy是可以的,除了你正在獲取已經是指針的arr的地址。這將工作:

char * arr = new char[50]; 
int num = 9; 

memcpy(arr, &num, sizeof(num)); 

cout<<"Contents of arr: "<< ((int *)arr) <<endl; 

也許你的for循環試圖做到這一點:

char * arr = new char[50]; 
int num = 9; 

*((int *)arr) = num; 

cout<<"Contents of arr: "<< ((int *)arr) << endl; 

這將是確定的,太。

編輯:數組的內容不能直接打印,至少沒有任何意義(並且可能由於沒有零終止而崩潰)。假設你想讓它看起來像一個整數,我已經編輯了上面的代碼。 C++純粹主義者可能反對使用C風格而不是reinterpret_cast>,但這是一個單獨的問題。

+0

謝謝!所以我不會再出現分段錯誤,但是我的輸出顯示'',arr:0xfc76230'的內容,'(在我將'num'更改爲等於10之後)。有沒有辦法來解決這個問題? – user5620123

+0

不要忘記考慮潛在的問題。 –

+0

是的,一般而言,對齊方法肯定是該方法的一個問題。沒有任何保證新的字符[50]將int整齊排列,儘管它將在大多數編譯器上。在使用它之前將值拉回到int中會更好。如果你在一個對齊的平臺上,memcpy是一種更安全的方法來將值從緩衝區中提取出來。 –