Tag: printf

intptr_t和uintptr_t的字符串格式

intptr_t和uintptr_t的字符串格式是什么,它对32位和64位架构都有效。 编辑 warning: format ‘%x’ expects type ‘unsigned int’, but argument 2 has type “AAA” 这是我在64位但不是32位的警告。 intptr_t AAA

C:printf中的ptrdiff_t应该使用哪个字符?

printf ptrdiff_t应该使用哪个字符? C标准是否清楚地解释了如何在printf打印ptrdiff_t ? 我还没找到任何人。 int a = 1; int b = 2; int* pa = &a; int* pb = &b; ptrdiff_t diff = b – a; printf(“diff = %?”, diff); // % what?

传递给printf的参数太多了

任何已经工作超过一周的C程序员遇到了因使用更多格式说明符而不是实际参数调用printf而导致的崩溃,例如: printf(“Gonna %s and %s, %s!”, “crash”, “burn”); 但是,当你向printf传递太多参数时,是否会发生类似的坏事? printf(“Gonna %s and %s!”, “crash”, “burn”, “dude”); 我对x86 / x64程序集的了解使我相信这是无害的,虽然我不相信没有一些我缺少的边缘条件,而且我不知道其他架构。 这种情况是否保证是无害的,或者这里是否存在可能导致崩溃的陷阱?

如何在一定数量的小数位(没有舍入)后截断浮点数?

我试图以6点精度打印数字684.545007 , 因为在684.54之后数字被截断(不是舍入) 。 我用的时候 var = 684.545007; printf(“%.2f\n”,var); 它输出684.55 ,但我想得到的是684.54 。 有谁知道我怎么能纠正这个?

如何使用printf格式化unsigned long long int?

#include int main() { unsigned long long int num = 285212672; //FYI: fits in 29 bits int normalInt = 5; printf(“My number is %d bytes wide and its value is %ul. A normal number is %d.\n”, sizeof(num), num, normalInt); return 0; } 输出: My number is 8 bytes wide and its value is 285212672l. A […]

如何在C中打印引号?

在接受采访时我被问到了 使用printf()函数打印引号 我不堪重负。 即使在他们的办公室里也有一台电脑,他们告诉我试一试。 我试过这样的: void main() { printf(“Printing quotation mark ” “); } 但我怀疑它不编译。 当编译器获得第一个”它认为它是字符串的结尾时,它不是。所以我怎么能实现这一点?

printf从char数组中添加额外的`FFFFFF`到hex打印

请考虑以下简化代码。 我想从文件中提取一些二进制数据/流,并以hex格式将其打印到标准输出。 我有额外的3个字节0xFFFFFF 。 怎么了? 多余的字节来自哪里? 产量 in: 2000FFFFFFAF00690033005A00 out: 2000FFFFFFAF00690033005A00 program.c #include #include int main(int argc, char** argv) { int i; char raw[10] = {0x20,0x00,0xAF,0x00,0x69,0x00,0x33,0x00,0x5A,0x00}; FILE *outfile; char *buf; printf(“in:\n\t”); for( i=0; i<10; i++ ) printf("%02X", raw[i]); outfile = fopen("raw_data.bin", "w+b"); fwrite(raw, 1, 10, outfile); buf = (char *) malloc (32 * sizeof(char)); fseek(outfile, […]

具有lld,ld和d类型标识符的size_t变量的printf

我写了这个小代码: #include int main() { size_t temp; temp = 100; printf(“lld=%lld, ld=%ld, u=%u\n”, temp, temp, temp); return 0; } 我在带有gcc版本4.1.1 20070105(Red Hat 4.1.1-52)的i386 GNU / Linux机器上运行它。 这是我得到的输出: lld=429496729700, ld=100, u=7993461 我可以理解第一个( lld )被打印为垃圾,因为当变量temp只有4个字节可用时, printf尝试打印8个字节(对于lld所表示的有signed long long )。 但是,我无法理解为什么最后一个标识符, u被打印为垃圾 – 而在我的理解中,这是size_t最接近的适用标识符。 这里我假设size_t是unsigned int (我的i386为4字节签名)。 现在,我用printf线做了一些调整: … printf(“ld=%ld, u=%u, lld=%lld\n”, temp, temp, temp); … 我有一个非常好的答案(除了lld部分)。 ld=100, […]

使用printf打印出浮动值

#include #include int main(void) { int x, *ptr_x; float f , *ptr_f; ptr_f = &f; ptr_x = &x; *ptr_x = 5; *ptr_f = 1.5; //printf(“%d %f\n”, f,x); printf (“\n\nxd = %d \t xf = %f \n ff = %f \t fd = %d”, x,x,f,f); return 0; } ff =%f的输出不是预期的。 xd = 5 xf = 0.000000 […]

当在printf中使用%d时,float变量会发生什么?

我正在尝试通过阅读C编程语言第2版来学习C. 我有一些编程经验,但没有C. 我目前在第1章。我有以下代码: float f; for (f = 0.0; f <= 3; f += 1.1) printf("A: %3f B: %6.2f\n", f, f + 0.15); 它打印输出: A: 0.000000 B: 0.15 A: 1.100000 B: 1.25 A: 2.200000 B: 2.35 看起来很好。 现在我按如下方式更改printf: printf(“A: %3d B: %6.2f\n”, f, f + 0.15); 新的输出是 A: 0 B: 0.00 A: -1610612736 B: 0.00 […]