我想將一個char數組賦值給另一個char數組,但以下操作不起作用。將char數組賦值給另一個char數組
unsigned char myval1[6] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
unsigned char myval2[6];
myval2 = &myval1[0];
我想將一個char數組賦值給另一個char數組,但以下操作不起作用。將char數組賦值給另一個char數組
unsigned char myval1[6] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
unsigned char myval2[6];
myval2 = &myval1[0];
這是一件事,你不能與分配做。一種可能性是
memcpy(myval2, myval1, sizeof(myval2));
在C
你不分配數組。你應該使用memcpy()
函數來複制數組。
memcpy(myval2, myval1, sizeof(myval2));
C-Array不可複製分配。
您必須自己複製(使用std::copy
(C++)或memcpy
(C))。
在C++ 11中,您可以改用std::array
。
不,你不能在C
必須在每個數組元素手動複製分配陣列。標準庫函數來做到這一點memcpy()
:
memcpy(myval2, myval1, sizeof myval2);
最後一個參數是要複製的字節數,並使用sizeof
是非常推薦。請注意,如果myval1
是更小比myval2
,上述將是未定義的行爲,因爲它會讀取超出myval1
的界限。你一定要小心。
一個很好的成語是這樣的:
memcpy(&myval2, &myval1, sizeof myval2);
通過配對&x
和sizeof x
您確保您始終複製字節的正確數量,即使你犯了一個錯誤在其他地方有變量名。
在其他帖子中建議的版本無論如何都是有效的,因爲myval2
是一個數組,因此(void *)myval2 == (void *)&myval2
。
試試這個
unsigned int myval1[6] = {0x01, 0x01, 0x01, 0x01, 0x01, 0x01};
unsigned int myval2[6];
unsigned int* add = &myval1[0];
cout << *add << endl;
以及如何將'myval1'的值複製到'maval2'? –
這裏沒有myval2,你需要使用變量add,add ++來訪問下一個值。是的變量添加地址將指向myval1的起始地址,所以* add將打印1; * add ++ = 1 [myval1 [1]]; * add ++ = 1 [myval1 [2]] –
什麼你正在嘗試做會產生編譯錯誤,因爲數組變量這裏** ** myval1,** ** myval2總是恆定的類型,所以你不能修改的基址你實際上在你的解決方案中做的一個數組。你可以按照下面給出的任何答案複製數組。 – prince