为了确定我们使用的C语言列的大小%<number>d.例如,我可以输入%3d,它会给我一个width = 3的列.我的问题是我之后的数字%是我收到的变量,所以我需要类似的东西%xd(x我在程序之前的某个时间收到的整数变量).但它不起作用.
有没有其他方法可以做到这一点?
如何使用GCC打印ff long long int和unsigned long long intC99?
我搜索了其他建议使用的帖子,%lld但它给出了这些警告:
警告#1:格式为[-Wformat] |的未知转换类型字符'l'
警告#2:格式参数太多[-Wformat-extra-args] |
对于以下尝试:
#include <stdio.h>
int main()
{
long long int x = 0;
unsigned long long int y = 0;
printf("%lld\n", x);
printf("%llu\n", y);
}
Run Code Online (Sandbox Code Playgroud) void TestPrint(char* format, ...)
{
va_list argList;
va_start(argList, format);
printf(format, argList);
va_end(argList);
}
int main()
{
TestPrint("Test print %s %d\n", "string", 55);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我需要得到:
Test print string 55
Run Code Online (Sandbox Code Playgroud)
实际上,我得到了垃圾输出.这段代码有什么问题?
在进行了一些测试后,我发现它printf比它快得多cout.我知道它依赖于实现,但在我的Linux机器上printf速度提高了8倍.所以我的想法是混合两种打印方法:我想cout用于简单的打印,我打算printf用于生成大量输出(通常在循环中).只要在切换到其他方法之前不忘记刷新,我认为这样做是安全的:
cout << "Hello" << endl;
cout.flush();
for (int i=0; i<1000000; ++i) {
printf("World!\n");
}
fflush(stdout);
cout << "last line" << endl;
cout << flush;
Run Code Online (Sandbox Code Playgroud)
这样好吗?
更新:感谢所有宝贵的反馈.答案摘要:如果你想避免棘手的解决方案,只需简单地不使用endl,cout因为它会隐式刷新缓冲区.请"\n"改用.如果你产生大量输出会很有趣.
我很难理解你为什么需要asprintf.它在手册中说
的功能
asprintf()和vasprintf()是的类似物sprintf(3)和vsprintf(3),除了它们分配一个字符串足够大以容纳包括终止空字节的输出,并且经由第一个参数的指针返回到它.应该传递此指针free(3)以在不再需要时释放已分配的存储.
所以这是我试图理解的例子:
asprintf(&buffer, "/bin/echo %s is cool", getenv("USER"));
Run Code Online (Sandbox Code Playgroud)
如果缓冲区分配足够大的字符串而不是说char*=(字符串),那有什么区别
我没有找到Mac的查找没有-printf选项的原因.Apple通常决定采取与其他命令不正交的选项吗?
如何在没有coreutils的Mac中获得与以下命令相同的结果?
find . -printf "%i \n" // command in Ubuntu
Run Code Online (Sandbox Code Playgroud) 我不知道数据类型time_t.它是浮动双重还是其他什么?因为如果我想显示它,我需要与之对应的标签printf.我可以从那里处理其余部分进行显示,time_t但我需要知道与之对应的数据类型.
如何打印(带printf)复数?例如,如果我有这个代码:
#include <stdio.h>
#include <complex.h>
int main(void)
{
double complex dc1 = 3 + 2*I;
double complex dc2 = 4 + 5*I;
double complex result;
result = dc1 + dc2;
printf(" ??? \n", result);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
..我应该使用什么转换说明符(或其他东西)"???"
我有一个数字列表如下:
0,16,32,48 ......
我需要以十六进制输出这些数字:
0000,0010,0020,0030,0040 ...
我尝试过如下解决方案:
printf("%.4x",a); // where a is an integer
Run Code Online (Sandbox Code Playgroud)
但我得到的结果是:
0000,0001 0002,0003,0004 ...
我想我就在附近.任何人都可以帮忙,因为我printf在C中不太擅长.
谢谢.