首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将printf()作为参数传递给自己: printf("%",printf("%s",“某事”));

将printf()作为参数传递给自己: printf("%",printf("%s",“某事”));
EN

Stack Overflow用户
提问于 2014-01-12 14:13:46
回答 2查看 454关注 0票数 1

这有点像个谜..。我刚刚又回到C级,希望这次能掌握它。所以我一直在读http://en.wikipedia.org/wiki/The_C_Programming_Language,我是这么说的:

除其他外,printf还识别.%本身。

我之前不知道的事。因此,我开始使用这个特性,编写了一小部分代码:

代码语言:javascript
复制
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {

    int number = 300;
    printf("%\n\n%12d\n\n\n\n\n", printf("%\n\n\n\n\n\n", printf("%s", "foooo!")), number);

    return (EXIT_SUCCESS);
}

这是输出:

我希望300在输出中。2是从哪里来的-有人知道吗?

编辑

我意识到,这完全是一个错误,因为我误解了我上面引用的文本。谢谢你帮助我认识到这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-12 14:17:40

您不能将有效的参数组合传递给三个printf()调用中的两个。这导致了未定义行为

除其他外,printf本身也识别. %%

这意味着格式说明符中的%%将导致将%写入输出。

它与将printf()的返回值(即写入的字符数)传递给另一个printf()调用无关。此外,您的代码甚至不包含%%

票数 11
EN

Stack Overflow用户

发布于 2014-01-12 14:23:42

代码语言:javascript
复制
A % followed by another % character will write a single % to the stream.

它看到%后面跟着一个\n,它不是一个有效的格式说明符。您的格式字符串也不匹配您的参数。printf的返回值是成功写入的字符数。因此,它是一个数字。如果格式字符串与传递给printf的参数数不匹配,则它是未定义的行为。

代码语言:javascript
复制
printf("%12d    %d ",          printf("%d",          printf("%s", "foooo!")), number);
        number  ret of printf--^       ret of printf-^
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21075645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档