c - 使用 strcpy 将 "string"复制到结构成员 char* 时出现段错误

标签 c segmentation-fault

<分区>

我有一个指向我的struct gsa_sentence 的指针,它有一个名为untouched_sentencechar* 结构成员。

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

结构:

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调用:

   gsa_sentence* gsa;

   gsa = malloc(sizeof(gsa_sentence));
   printf("%s", line);
    if(gsa != NULL){
       strncpy(gsa->untouched_sentence, line, strlen(line));
       printf("%s", gsa->untouched_sentence);
        }

我在我的代码的其他地方使用了 strcpy,它工作正常,我不知道发生了什么。

gdb 调试器说它肯定在 strcpy 函数调用上

最佳答案

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

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

typedef struct gsa_sentence{

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

关于c - 使用 strcpy 将 "string"复制到结构成员 char* 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22314329/

相关文章:

c - 如何在 Windows 10 中使用 Code::Blocks 16.01 计算 -O3 的时钟周期?

c - C 中枚举存储大小未知

c++ - 避免堆栈溢出C++

c - 当我在 C 中更改目录时出现段错误

c - 将 realloc 与 for 循环一起使用

c - 从不改变表达式中的状态

c - select() 似乎会出现段错误/终止

c - 链表 while 循环的段错误

c - 简单链表段错误

c - 如何将两个结构一起 fread() C