初始化和访问结构体中的字符数组

马基斯·曼德拉斯

我似乎无法找到一种方法来初始化结构而不会出现分段错误。这是作业`

int id = 5;
// scanf ("%10d", &id);
printf("Please give an name\n");
char *tmpName = (char*)malloc(MAXSTRING * sizeof(char));
fgets(tmpName,MAXSTRING,stdin);
student newStudent = (student){ .id = id , .name = tmpName };
printf("%d",newStudent.id);
printf("%s",newStudent.name);

` 这是结构本身

#define MAXSTRING  256
typedef struct{
    char *name;
    int id;
}student;

我可以成功初始化 struct ,但我无法访问 name 变量,有什么想法吗?

编辑:当时提交的答案什么也没提供,问题在于结构的初始化方式

char tmpName[MAXSTRING] =  {0};
scanf("%s",tmpName);
student newStudent = { .id = id };
strcpy(newStudent.name,tmpName );

此块修复了问题,将关闭主题。

云诺什

你定义一个指针

char *tmpName;

你没有做任何事情来使它实际上指向一些可用的空间,尤其是没有malloc()或类似的。
您已scanf()(如果成功...)写入指针,但是是一个字符串,而不是任何有意义的地址。即,如果该字符串不是极短,则您肯定会写得超出范围。

scanf("%s",&tmpName);

不要对段错误感到惊讶,如果没有,请感到惊讶。
稍后你会从那个奇怪的非指针指向的地方读取......

要解决此问题,请malloc()在指针定义后插入 a 或者使用固定数组char作为输入缓冲区。
在 scanf() 中使用指针本身而不是其地址将字符串写入 malloced 空间。(或数组标识符。)

剩下的就是有足够空间、无法扫描、不检查返回值等的典型问题。这里有一组很好的获取正确输入的基本提示:
如何在 C 中读取/解析输入?常见问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章