2012-07-07 45 views
1

我想從一個字符*複製一個字符串到另一個,並不知道爲什麼複製不起作用。爲什麼兩個字符指針之間沒有字符串複製?

我正在寫一個鏈接列表程序 - Linklist - 並且有兩個char *涉及指針。每個點到struct Node如下:

struct Node 
{ 
    char * message; 
    char * text; 
    struct Node * next; 
}; 

typedef struct Node * Linklist; 

我寫它有兩個參數來創建一個新的LinkNode功能:

Linklist create(char *message,char * text) 
{ 
    Linklist list =(Linklist)malloc(sizeof(struct Node)); 
    //the message changes after the sentence but text is right. 
    if(list==NULL) printf("error:malloc"); 
    list->message=message; 
    list->text=text; 
    return list; 
} 

在主:

字符*消息的「HelloWorld 「

char * text is」test「

我在malloc之後觀看了gdb中的消息。該消息更改爲「/ 21F/002」,但文本仍然是「測試」

我在消息之前添加了const,但它不起作用。

任何人都可以告訴發生了什麼?

謝謝。

+0

LinkList是如何定義的? – 2012-07-07 16:32:55

+0

這還有更多嗎?函數本身還有其他什麼設置? – sean 2012-07-07 16:33:03

+0

你打電話給'創建'? – Kevin 2012-07-07 16:33:27

回答

4

問題是c中的字符串不能以相同的方式工作。這裏是你如何複製一個字符串:

Linklist create(char *message,char * text) 
{ 
    Linklist list =(Linklist)malloc(sizeof(struct Node)); 
    //the message changes after the sentence but text is right. 
    if(list==NULL) printf("error:malloc"); 

    list->message = malloc(strlen(message)+1); 
    if(list->message==NULL) printf("error:malloc"); 
    strcpy(list->message,message); 

    list->text = malloc(strlen(text)+1); 
    if(list->text==NULL) printf("error:malloc"); 
    strcpy(list->text,text); 

    return list; 
} 

當然,你必須要小心這裏,確保信息和文字沒有來自用戶或你的風險緩衝區溢出漏洞。

你可以使用strncpy()來解決這個問題。

2

您必須爲指針消息和文本分配存儲空間,然後複製該字符串。

相關問題