我有一个指向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函数调用
上答案 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)
会更好。但我也不确定那是你想要的。