在 C 中使用 struct 时出现分段错误

Posted

技术标签:

【中文标题】在 C 中使用 struct 时出现分段错误【英文标题】:Segmentation fault when using struct in C 【发布时间】:2020-11-21 07:29:00 【问题描述】:

为什么会出现分段错误?我对C很陌生,对我来说真的很难。 我google了很多,发现它必须正常工作。

#include <stdio.h>

struct school

    int schoolNum;
    int year;
    int gradNum;
    int univNum;
;

int main()

    struct school schools[5] = 
        114, 2020, 470, 300,
        86, 2019, 545, 450,
        231, 2020, 340, 320,
        113, 2020, 435, 395,
        55, 2019, 395, 380
    ;

    printf('%d\n', schools[0].gradNum);

    return 0;

【问题讨论】:

使用 " 而不是 ' 字符串文字。 printf 调用中的单引号是错误的。对格式字符串使用双引号。您应该收到有关该问题的编译器警告。 (启用所有警告。) 谢谢你,那真是愚蠢的错误 您可能还想在结构的初始化数组中添加 4 对大括号 ... 一个体面的编译器应该发出关于 multi.character 文字的警告,如果没有,那么您需要启用更多警告。 【参考方案1】:

您的代码中有两个错误,如 cmets 所述,您需要在 printf 调用中将单引号替换为双引号。 然后你需要添加大括号对来包围每个学校实例,如下所示:

struct school schools[5] = 
        114, 2020, 470, 300,
        86, 2019, 545, 450,
        231, 2020, 340, 320,
        113, 2020, 435, 395,
        55, 2019, 395, 380
    ;

【讨论】:

事实上,省略内括号本身并不是错误,但强烈建议添加它们以提高可读性。

以上是关于在 C 中使用 struct 时出现分段错误的主要内容,如果未能解决你的问题,请参考以下文章

在指针迭代中使用 for 循环时出现分段错误

在 C 中创建大型数组时出现分段错误

在 C++ 中使用向量时出现分段错误

尝试在 C 中使用 realloc 扩展数组时出现分段错误错误 [关闭]

为啥在访问二级指针时出现分段错误错误? C语言

在 C 中使用 fgets 时出现“分段错误:11”