2012-10-13 43 views
1

我有兩個字符指針:複製兩個char * **給帶BUFF memcpy的 - 用C語言

char *a="A"; 
char *b="B"; 

和指向指針緩衝區:

char **buf = malloc(sizeof(char*)*2); 

而且我想使用memcpy複製兩個變量來BUF:

memcpy(*buf, &a, sizeof(char*)); 
memcpy(*buf, &b, sizeof(char*)); 

但它代替第一個變量..

我該如何複製兩個?

回答

1

什麼是你真正想要做什麼?

隨着

char **buf = malloc(sizeof(char*)*2); 

memcpy(*buf, &a, sizeof(char*)); 
memcpy(*buf, &b, sizeof(char*)); 

,除非你之間省略了一些初始化,你得到了一個未定義的行爲。 malloc ed內存的內容是未指定的,所以當*buf被解釋爲memcpy中的void*時,幾乎肯定不會產生有效的指針,並且它是空指針的概率不可忽略。

如果你只是想buf包含兩個三分球,malloc

buf[0] = a; 
buf[1] = b; 

後是最簡單和乾淨的解決方案,但

memcpy(buf, &a, sizeof a); 
memcpy(buf + 1, &b sizeof b); 

也將是有效的(也有&buf[1],而不是buf + 1

如果你想連接字符串ab指出,你正在遵循一個完全錯誤的方法。你需要一個指向足夠大面積的char*來保存結果(包括0終止符),最簡單的方法是使用strcat

0

我想你的計劃與我自己的測試代碼:我希望這有助於:

#define MAX_LENGTH 10 
#define ARRAY_LENGTH 2 
int main(int argc, char *argv[]) 
{ 
    char *a = "A"; 
    char *b = "B"; 
    char **buf = (char **)malloc(sizeof(char*)*ARRAY_LENGTH); 
    *buf = (char *)malloc(sizeof(char) * MAX_LENGTH); 
    *(buf+1) = (char *)malloc(sizeof(char) * MAX_LENGTH); 
    memset(buf[0],0,10); 
    memset(buf[1],0,10); 
    memcpy(buf[0],a,strlen(a)); 
    memcpy(buf[1],b,strlen(b)); 
    printf("%s %s",buf[0],buf[1]); 
    free(buf[0]); 
    free(buf[1]); 
     free(buf) 
    return 0; 
} 
+1

代碼沒有縮進,所以有些'*'被解釋爲降價,OP想要複製'char *'。 –

+0

這是代碼不正確: char ** buf; * buf [0] = malloc(sizeof(char)* MAXLENGTH); * buf [1] = malloc(char)* MAXLENGTH); memcpy(&(* buf [0]),&a,strlen(a));的malloc((* BUF [1]),B,strlen的(B)); –