在make APUE第二版时出现了这个错误

软件和网站开发以及相关技术探讨
回复
panchenji
帖子: 17
注册时间: 2009-02-01 11:29

在make APUE第二版时出现了这个错误

#1

帖子 panchenji » 2009-02-02 18:42

错误:
badexit2.c: 在函数‘printfoo’中:
badexit2.c:11: 警告: 格式字符串不是一个字面字符串而且没有待格式化的实参
make[2]:正在离开目录 `/home/panchenji/apue.2e/threads'
make[1]:正在离开目录 `/home/panchenji/apue.2e'

badexit2.c代码:
#include "apue.h"
#include <pthread.h>

struct foo {
int a, b, c, d;
};

void
printfoo(const char *s, const struct foo *fp)
{
printf(s);
printf(" structure at 0x%x\n", (unsigned)fp);
printf(" foo.a = %d\n", fp->a);
printf(" foo.b = %d\n", fp->b);
printf(" foo.c = %d\n", fp->c);
printf(" foo.d = %d\n", fp->d);
}

void *
thr_fn1(void *arg)
{
struct foo foo = {1, 2, 3, 4};

printfoo("thread 1:\n", &foo);
pthread_exit((void *)&foo);
}

void *
thr_fn2(void *arg)
{
printf("thread 2: ID is %d\n",(int)pthread_self());
pthread_exit((void *)0);
}

int
main(void)
{
int err;
pthread_t tid1, tid2;
struct foo *fp;

err = pthread_create(&tid1, NULL, thr_fn1, NULL);
if (err != 0)
err_quit("can't create thread 1: %s\n", strerror(err));
err = pthread_join(tid1, (void *)&fp);
if (err != 0)
err_quit("can't join with thread 1: %s\n", strerror(err));
sleep(1);
printf("parent starting second thread\n");
err = pthread_create(&tid2, NULL, thr_fn2, NULL);
if (err != 0)
err_quit("can't create thread 2: %s\n", strerror(err));
sleep(1);
printfoo("parent:\n", fp);
exit(0);
}

菜鸟请高人指点
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

Re: 在make APUE第二版时出现了这个错误

#2

帖子 BigSnake.NET » 2009-02-02 18:45

printf(s);

改成

printf("%s", s);
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
panchenji
帖子: 17
注册时间: 2009-02-01 11:29

Re: 在make APUE第二版时出现了这个错误

#3

帖子 panchenji » 2009-02-02 19:33

BigSnake.NET,

前面那个好了,但是怎么好像还是没有MAKE成功,请问怎么查看错误阿,终端里显示的好像没有什么错误,只有警告
头像
BigSnake.NET
帖子: 12522
注册时间: 2006-07-02 11:16
来自: 廣州
联系:

Re: 在make APUE第二版时出现了这个错误

#4

帖子 BigSnake.NET » 2009-02-03 19:36

那贴出来阿。。
^_^ ~~~
要理解递归,首先要理解递归。

地球人都知道,理论上,理论跟实际是没有差别的,但实际上,理论跟实际的差别是相当大滴。
回复