免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1571 | 回复: 7
打印 上一主题 下一主题

关于 printf args [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-19 06:36 |只看该作者 |倒序浏览
#include<stdio.h>
#include<string.h>

main()
{
        char    sTest[10+1];
        int       iTest = 100;

        memset(sTest, 0x00, 10);
        memcpy(sTest, "1234567890",10);

        printfile(("iTest = %d | sTest = %s",iTest,sTest));
}

printfile(args)
{
        printf args;   /*谁知道这个printf怎么写啊*/
}

写成printf args;编译不过去;
写成printf("%s", args); 只能打印出 "1234567890";
写成printf("%d",args);不可能对的。

哪位高手指点一下!!

论坛徽章:
0
2 [报告]
发表于 2006-08-19 09:16 |只看该作者
这是想干甚么???

(("iTest = %d | sTest = %s",iTest,sTest));

要自己些printf ????

论坛徽章:
0
3 [报告]
发表于 2006-08-19 14:25 |只看该作者
用(("iTest = %d | sTest = %s",iTest,sTest))目的是想在printfile(args)这个函数里边完成写文件的过程,详细的printfille是这么写的:

printfile(args)
{

        FILE    *fp;
        int     fd,id;

        id = dup(STDOUT_FILENO);

        fp=fopen("./gwt.log","a");
        fd=fileno(fp);
        dup2(fd,STDOUT_FILENO);

        printf ("write to file");
        printf args; /*在这里把类似(("iTest = %d | sTest = %s",iTest,sTest));打印到文件gwt.log里边*/
        printf("\n");
        fflush(stdout);
        dup2(id, STDOUT_FILENO);
        printf("finished!!\n");
        fclose(fp);
        return 0;

}

我不想改动(("iTest = %d | sTest = %s",iTest,sTest))的调用方式,能否在printfile这个函数里边改动,把(("iTest = %d | sTest = %s",iTest,sTest))打印到文件里边?

论坛徽章:
0
4 [报告]
发表于 2006-08-19 14:38 |只看该作者
  1. printfile(args) // <---args的类型???
复制代码
  1. printfile(("iTest = %d | sTest = %s",iTest,sTest));
复制代码

这个是……
LZ是不是想要用变长参数啊?那man va_start

论坛徽章:
0
5 [报告]
发表于 2006-08-19 14:58 |只看该作者
没错,的确是要用变长参数。
args = ("iTest = %d | sTest = %s",iTest,sTest) 所以我也不好说它是很么类型(调用的时候是双括号么,所以args还保留这一个括号)
printf args 就相当于 printf ("iTest = %d | sTest = %s",iTest,sTest) 以前我见有人用过,但是不知道为什么我写了就不ok!!
由于很多地方都用了类似(("iTest = %d | sTest = %s",iTest,sTest) )的调用,所以不想改动,看看如何能把arg打印出来??

[ 本帖最后由 brooks_lee 于 2006-8-19 15:12 编辑 ]

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
6 [报告]
发表于 2006-08-19 15:18 |只看该作者
那你就用宏实现吧。
记得c语言的语法,蛮干是不行的。

论坛徽章:
0
7 [报告]
发表于 2006-08-19 15:22 |只看该作者
原帖由 lenovo 于 2006-8-19 15:18 发表
那你就用宏实现吧。
记得c语言的语法,蛮干是不行的。


大师,指点一下,怎么实现啊?

论坛徽章:
0
8 [报告]
发表于 2006-08-19 15:25 |只看该作者
原帖由 brooks_lee 于 2006-8-19 14:58 发表
没错,的确是要用变长参数。
args = ("iTest = %d | sTest = %s",iTest,sTest) 所以我也不好说它是很么类型(调用的时候是双括号么,所以args还保留这一个括号)
printf args 就相当于 printf (" ...

变长参数参看:
man va_start

还不明白的话就google一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP