遇到打印函数的基本问题,字符被跳过,来请教一下大家

2019-12-10 18:26发布

当然了,这次是用了新的IDE或者说编译器,串口重定向什么的都做了,其实都还没有走到物理输出那一步,还在前面字符处理时候就出现问题了,具体如下
打印一个hello却什么都没有输出,实际上调试发现根本就没有走到putch()
printf("hello ");
跟踪调试发现在下面函数的  while (*cfmt) 没有满足条件,直接跳过了,跳到 return nout 了

int vfprintf(FILE *fp, const char *fmt, va_list ap)
{
    char *cfmt;

    cfmt = (char *)fmt;
    nout = 0;
    while (*cfmt) {
        nout += vfpfcnvrt(fp, &cfmt, ap);
    }
    return nout;
}

而 cfmt[0] 却是等于'h'的 ,那就能满足执行 nout += vfpfcnvrt(fp, &cfmt, ap);的条件啊
真是奇怪了,
哦忘了说是 PIC那个 MPLAB X IDE +XC8编译器,哎

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
zhongsandaoren
1楼-- · 2019-12-10 23:14
楼主用的picshit?还有mplabshit?
d__xin
2楼-- · 2019-12-11 00:45
是不是库的问题?前些日子弄STM8也遇到了类似的问题,明明看起来没问题,但就是输出不对,后来编译选项选FULL就正常了。
1a2b3c
3楼-- · 2019-12-11 03:34
 精彩回答 2  元偷偷看……
1a2b3c
4楼-- · 2019-12-11 08:53
d__xin 发表于 2019-6-5 14:36
是不是库的问题?前些日子弄STM8也遇到了类似的问题,明明看起来没问题,但就是输出不对,后来编译选项选FU ...

好像和库什么的没有关系,编译器关系很大,
比如 我直接写一句 if (*cfmt==0)return; 他真的就return了,而此时 *cfmt 就是一个字符,根本不是 0 啊
supertankhzt
5楼-- · 2019-12-11 11:34

nout += vfpfcnvrt(fp, &cfmt, ap);
请问这句为什么cfmt前面要加取址运算符“&”,cfmt本身是指针不用再取址了,怀疑楼主在调用vfprintf时实参也写错了
1a2b3c
6楼-- · 2019-12-11 15:29
supertankhzt 发表于 2019-6-5 18:25
nout += vfpfcnvrt(fp, &cfmt, ap);
请问这句为什么cfmt前面要加取址运算符“&”,cfmt本身是指针不用再取 ...

一楼的代码我是复制的官方代码,自己没有半点修改,
其实你说的这一行我调试的过程中都还没有运行到哪里去,因为前面的while条件没有满足。。。也就是说那个while无论判断输入的是什么结果都是不满足,

一周热门 更多>