2014-04-07 134 views
0

我想將一個char數組賦值給另一個char數組,但以下操作不起作用。將char數組賦值給另一個char數組

unsigned char myval1[6] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01}; 
unsigned char myval2[6]; 
myval2 = &myval1[0]; 
+0

什麼你正在嘗試做會產生編譯錯誤,因爲數組變量這裏** ** myval1,** ** myval2總是恆定的類型,所以你不能修改的基址你實際上在你的解決方案中做的一個數組。你可以按照下面給出的任何答案複製數組。 – prince

回答

0

你可以嘗試這樣的事情..

unsigned char myval1[6] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01}; 
unsigned char *myval2; 
myval2 = &myval1[0]; 
+0

可能不是OP所想到的。它爲myval1創建一個別名,並且不復制任何值。 – laune

+0

雅,我試圖保留他的第三行的語法.. – 51k

1

這是一件事,你不能與分配做。一種可能性是

memcpy(myval2, myval1, sizeof(myval2)); 
1

C你不分配數組。你應該使用memcpy()函數來複制數組。

memcpy(myval2, myval1, sizeof(myval2)); 
2

C-Array不可複製分配。
您必須自己複製(使用std::copy(C++)或memcpy(C))。
在C++ 11中,您可以改用std::array

0

不,你不能在C

必須在每個數組元素手動複製分配陣列。標準庫函數來做到這一點memcpy()

memcpy(myval2, myval1, sizeof myval2); 

最後一個參數是要複製的字節數,並使用sizeof是非常推薦。請注意,如果myval1更小myval2,上述將是未定義的行爲,因爲它會讀取超出myval1的界限。你一定要小心。

0

一個很好的成語是這樣的:

memcpy(&myval2, &myval1, sizeof myval2); 

通過配對&xsizeof x您確保您始終複製字節的正確數量,即使你犯了一個錯誤在其他地方有變量名。

在其他帖子中建議的版本無論如何都是有效的,因爲myval2是一個數組,因此(void *)myval2 == (void *)&myval2

0

試試這個

unsigned int myval1[6] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01}; 
unsigned int myval2[6]; 
unsigned int* add = &myval1[0]; 

cout << *add << endl; 
+0

以及如何將'myval1'的值複製到'maval2'? –

+0

這裏沒有myval2,你需要使用變量add,add ++來訪問下一個值。是的變量添加地址將指向myval1的起始地址,所以* add將打印1; * add ++ = 1 [myval1 [1]]; * add ++ = 1 [myval1 [2]] –

相關問題