将字符串分配给C中的结构变量时出现分段错误



我目前正在学习C语言中的结构,并在字符串分配方面遇到困难。

如果我这样写代码,我会出现分段错误:

#include<stdio.h>
int main(void)
{
struct part {
char *name;
};

struct part part_1[2];

fgets(part_1[0].name,20,stdin); 
printf("%sn",part_1[0].name);  
}   

我尝试了一些其他方法,一切都很好,所以我不明白上面的代码有什么问题。

例如:如果我把fgets(part_1[0].name,20,stdin)改成part_1[0].name = "some_dummy_data_here",我就不会出错。

最令人困惑的是,如果我使用fgets(part_1[1].name,20,stdin)而不是fgets(part_1[0].name,20,stdin),它会起作用。

然而,如果我使用数组而不是指针,我不会遇到任何问题。例如,如果我写这样的代码:

struct part{
char name[20];
}

一切顺利。

那么,这里的问题是什么?

char*name和char-name[20]的区别在于,当定义后者时,编译器已经为其分配了内存空间。如果你想使用指针,你需要提前为它们分配内存。例如,使用malloc函数:

part_1[0].name=malloc(sizeof(char(*20(

然后fgets就不会产生segmentfault。

至于代码part_1[0]。name="part_1[0]";some_dummy_data_here";,字符串";some_dummy_data_here";是字符串常量,并且已在内存中。这段代码让指针名称指向它,因此不需要预先分配空间。

相关内容

  • 没有找到相关文章

最新更新