使用strcpy将“字符串”复制到struct member char *时出现分段错误

时间:2014-03-11 00:48:42

标签: c segmentation-fault

我有一个指向struct gsa_sentence的指针,它有一个名为char*的{​​{1}}类型的结构成员。

我的目标是使用strcpy将文件中的一行复制到此struct变量中,但是我在strcpy函数调用中遇到了分段错误。

结构:

untouched_sentence

strcpy call:

typedef struct gsa_sentence{

    char *untouched_sentence;
    char *sentence_id;
    char mode;
    int fix;
    int sv_1;
    int sv_2;
    int sv_3;
    int sv_4;
    int sv_5;
    int sv_6;
    int sv_7;
    int sv_8;
    int sv_9;
    int sv_10;
    int sv_11;
    int sv_12;
    int pdop;
    int hdop;
    int vdop;

}gsa_sentence;

我在我的代码中的其他地方使用了strcpy,它工作正常,我无法弄清楚发生了什么。

gdb调试器说它确实在strcpy函数调用

4 个答案:

答案 0 :(得分:4)

Strcpy正在尝试将字符复制到未初始化的字符缓冲区中。您还需要untouched sentence的malloc空间,或者将untouched sentence重新分配到line的内存地址。

或者,您可以更改结构的定义以默认包含已分配的内存:

typedef struct gsa_sentence{

    char untouched_sentence[50];
    char sentence_id[50];
...

答案 1 :(得分:3)

在复制数据之前,您需要为gsa->untouched_sentence分配内存。您只是为结构本身分配内存。

答案 2 :(得分:2)

你必须为gsa-> untouched_sentence

分配内存
gsa->untouched_sentence = malloc ( strlen ( line ) + 1 );

答案 3 :(得分:-1)

您必须为字符串分配空间:所有字符,加上分隔符。

malloc (sizeof (gsa))不这样做:“sizeof(gsa)”只返回指针 - 而不是整个字符串。

'malloc(sizeof(gsa_sentence))or 'malloc (sizeof (gsa_sentence)+1)会更好。但我也不确定那是你想要的。