尝试导入头文件并使用它时C中的分段错误

时间:2016-05-06 12:42:28

标签: c

当我尝试在C中编译我的程序时,由于某种原因,我试图找出一个段错误。

这是我的main.c:

#include <stdio.h>
#include "main.h"

int main()
{   
    printf("My name is %s and is %s\n", NAME, AGE);
    return 0;
}

main.h:

#define AGE 30
#define NAME "Doelal"

尝试使用此编译:

gcc main.c -o main

当我运行它时,我得到分段错误

2 个答案:

答案 0 :(得分:2)

原因是您在向printf提供AGE宏时调用了未定义的行为。代码中的格式字符串需要一个字符串参数,但实际上你的AGE宏是一个整数常量文字。

您有2个选项:从

更改格式字符串
"My name is %s and is %s\n"

"My name is %s and is %d\n"

或从

更改您的AGE宏
#define AGE 30

#define AGE "30"

答案 1 :(得分:2)

要了解发生了什么,请按照预处理器的方式进行手动替换:

printf("My name is %s and is %s\n", NAME, AGE);

变为

printf("My name is %s and is %s\n", "Doelal", 30);

现在将格式字符串中的%说明符与参数匹配。您是否看到使用30格式说明符打印数字%s时不匹配?

您可以通过为年龄提供正确的%d格式说明符来解决此问题:

"My name is %s and is %d\n"
//                     ^