关于c语言的printf问题,在linux下运行问题

#include
#include
#include
#include

int main(void)
{
pid_t p;
char* message;
int n;
p = fork();
if(p {
printf("fork failed\n");
exit(1);
}
if(p==0)
{
message = "This is the child\n";
n=6;
}
else
{
message = "This is the parent\n";
n=3;
}
for(;n>0;n--)
{
printf(message);
sleep(1);
}
return 0;
}

printf(message);这条语句我觉得没什么问题,但gcc下运行时会报错

myfork.c: In function ‘main’:
myfork.c:30:5: warning: format not a string literal and no format arguments [-Wformat-security]
printf(message);
^
请指点原因

只是警告,因为你用的是指针,不是字符串常量,而且没有给参数。如果你程序运行的时候赋值"%d"之类的(当然你没有这么赋值,但是存在可能性),会出错。

message没有参数,printf有警告提示。

printf("%s\n", message);

你要查看printf打印的格式,格式不对。这个有规范的,可以查下文档

只是个警告而已,不用搭理编译器,,

根据提示,应该是format中没有占位符的参数;
printf sprinf snprintf对应函数,如果出现格式不正确的话,都会有类似的警告,
程序不影响运行结果,最好man printf 查看源函数解释,也是一种学习方式。