[英]Copying unsigned char in C
我想使用memcpy,但在我看來它是從一開始就復制數組?
我希望從A[a]
復制到A[b]
。 因此,我找到了另一種方法,
void copy_file(char* from, int offset, int bytes, char* to) {
int i;
int j = 0;
for (i = offset; i <= (offset+bytes); i++) to[i] = from[j++];
}
我遇到段錯誤,但我不知道從哪里得到段錯誤? 每個條目包含8個字節,所以我的第二次嘗試是
void copy_file(char* from, int offset, int bytes, char* to) {
int i;
int j = 0;
for (i = 8*offset; i <= 8*(offset+bytes); i++) to[i] = from[j++];
}
但仍然是段錯誤。 如果您需要更多信息,請隨時詢問!
我遇到段錯誤,但我不知道從哪里得到段錯誤?
主要建議:學習使用調試器。 它提供有關錯誤指令的有用信息。
為了回答您對上述問題中顯示的代碼段的查詢,
to
和from
)對NULL
取消引用之前。 正確使用memcpy()
:
根據手冊頁 , memcpy()
的簽名指示
void * memcpy(void * dest,const void * src,size_t n);
它將src
n
個字節從地址指針復制到dest
指向的地址。
另外,需要注意的一個非常重要的點是:
存儲區域不得重疊。
因此,要將A [a]復制到A [b],您可以編寫如下內容
memcpy(destbuf, &A[a], (b-a) );
在我看來,
memcpy
從一開始就復制了數組
不,不是的。 實際上, memcpy
絲毫不知道它是在數組中復制還是復制到數組。 它將其參數視為指向非結構化內存塊的指針。
如果希望從A[a]
復制到A[b]
,請將地址A[a]
以及A[b]
和A[a]
之間的字節數傳遞給memcpy
,如下所示:
memcpy(Dest, &A[a], (b-a) * sizeof(A[0]));
這會將A
的內容從索引a
(包括索引)復制到索引b
(不包括索引)復制到Dest
指向的存儲塊中。 如果您也希望對Dest
應用偏移量,請對第一個參數使用&Dest[d]
。 對於char
,signed或unsigned以外類型的數組,必須通過sizeof
乘法sizeof
。
將最后一行從
for (i = offset; i <= (offset+bytes); i++)
to[i] = from[j++];
至
for (i = offset; i <= bytes; i++,j++)
to[j] = from[i];
這對我來說很好。 我考慮過offset
是數組的開始, byte
是數組的結束。 即復制from[offset]
到from[bytes]
到to[]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.