1

あるchar*から別のchar*に文字列をコピーしようとしていますが、コピーが機能しない理由がわかりません。

私はリンクリストプログラムを書いています---Linklistそして2つのchar *ポインタが関係しています。それぞれが次のように指しstruct Nodeます。

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

typedef struct Node * Linklist;

新しいを作成するための2つのパラメーターを持つ関数を作成しました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;
}

主に:

char*messageは"helloworld"です

char * text is "test"

mallocの後、gdbでメッセージを見ました。メッセージは「/21F/ 002」に変更されましたが、テキストはまだ「テスト」です

メッセージの前に追加しましconstたが、機能しません。

誰もが何が起こっているのかを知ることができますか?

ありがとう。

4

2 に答える 2

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() を使用してその問題を解決できます。

于 2012-07-07T16:42:18.280 に答える
2

ポインター メッセージとテキスト用のストレージを割り当ててから、文字列をコピーする必要があります。

于 2012-07-07T17:11:24.373 に答える