当我尝试在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
当我运行它时,我得到分段错误。
答案 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"
// ^