Tag: printf

C中的无符号值

我有以下代码: #include int main() { unsigned int a = -1; int b = -1; printf(“%x\n”, a); printf(“%x\n”, b); printf(“%d\n”, a); printf(“%d\n”, b); printf(“%u\n”, a); printf(“%u\n”, b); return 0; } 输出是: ffffffff ffffffff -1 -1 4294967295 4294967295 我可以看到根据传递给printf函数的值将值解释为有符号或无符号。 在这两种情况下,字节都是相同的( ffffffff )。 那么, unsigned单词是什么?

正确使用具有固定大小类型的scanf / printf(和系列)的方法?

阅读这个SO问题 ,我开始想知道 – 使用具有固定大小类型的scanf / printf (和系列)的正确方法是什么? 例如,如果我有short int或int ,我分别使用%hd和%d – 很好。 但是如果我有int16_t怎么int16_t ? short int可能与int16_t不同,它取决于平台。 任何其他固定尺寸(整体)类型都一样吗? 注意:因为看起来我收到了一些向下投票,因为我“ 没有尝试谷歌这个 ”,看起来我需要解释:我没有在这里看到类似的问题,这就是我发布它的原因。 SO中的大部分问题都可以通过谷歌回答,而不是在这里询问。 那将使StackOverflow成为现实,它实际上就是现在。 不,我没有这样做是为了声誉 – 我已经达到了今天的每日声望上限(在发布此问题之前有24票)。 我的观点是 – 我认为这不值得投票。

如何写一个整数到一个文件(fprintf和fwrite之间的差异)

我一直在尝试写一个整数到一个文件(打开模式是w)。 fprintf写得正确,但fwrite写了乱码: int length; char * word = “word”; counter = strlen(word); fwrite(&length, sizeof(int), 1, file); fwrite(word, sizeof(char), length, file); 并且文件中的结果是: 字 但如果我改用fprintf,就像这样: int length; char * word = “word”; counter = strlen(firstWord); fprintf(file, “%d”, counter); fwrite(word, sizeof(char), length, file); 我在文件中得到了这个结果: 4word 任何人都可以告诉我做错了什么? 谢谢! 更新:我最终想把写入改为二进制(我将以wb模式打开文件),我的实现会有区别吗?

使用snprintf避免缓冲区溢出

我正在使用这样的snprintf来避免缓冲区溢出: char err_msg[32] = {0}; snprintf(err_msg, sizeof(err_msg) – 1, “[ ST_ENGINE_FAILED ]”); 如果字符串长度超过32个字节,我添加-1为空终止符保留空间。 我的想法是否正确? 平台: GCC 4.4.1 C99

如何在`printf()`中使用“zd”说明符?

寻找有关使用printf() “zd”说明。 当然,以下对于C99及更高版本是正确的。 void print_size(size_t sz) { printf(“%zu\n”, sz); } C规范似乎允许printf(“%zd\n”, sz)取决于它的读取方式: 7.21.6.1 fprintf函数 z指定以下d , i , o , u , x或X转换说明符适用于size_t或相应的带符号整数类型参数; 或者后面的n转换说明符适用于指向与size_t参数对应的有符号整数类型的指针。 C11dr§7.21.6.17 这应该被解读为 “ z指定以下d …转换说明符适用于size_t或相应的带符号整数类型参数…”(两种类型)和“ z指定后续u …转换说明符适用于size_t或对应的有符号整数类型参数……“(两种类型) 要么 “ z指定以下d …转换说明符适用于相应的有符号整数类型参数…”(仅限带符号类型)和“ z指定后续u …转换说明符适用于size_t ”(无符号类型)只要)。 我一直在使用#2定义,但现在不太确定。 哪个是正确的,1,2或其他什么? 如果#2是正确的,那么可以使用”%zd”的类型的示例是什么?

在C中printf背后的是什么?

可能重复: 了解printf的硬件 我不是在寻找printf函数的实现,但是我想知道,当用C printf调用printf时会发生什么? 所有活动都在软件和硬件级别进行。 这就是我认为PrintfCAll – > KernelModeOn – > SystemCallMade – >数据放在某些排序的输出缓冲区 – >输出被转储到某些控制器的缓冲区 – >控制器将其转储到监视器 – >中断CPU说工作已完成。 我有多正确? 谢谢。 编辑:Unix可以作为一个平台。 说ubuntu。 有人可以告诉我,数据从何处流出,是否还有监视器的控制器? 上面提到的时间表在多大程度上是正确的?

Scanf / Printf双变量C.

假设我在C中有以下代码: double var; scanf(“%lf”, &var); printf(“%lf”, var); printf(“%f”, var); 它从stdin变量’var’读取,然后在stdout’var’中打印两次。 我理解你是如何从stdin读取双变量的,但我的问题是: 为什么你可以用%lf打印双倍? 为什么你可以用%f打印双倍? 使用哪一种更好更正确?

为什么不是新的(特定于位宽)printf()格式选项字符串作为C99的一部分?

在研究如何在C中执行跨平台printf()格式字符串时(也就是考虑到我希望每个整数参数对printf()的位数应该是)我在printf()上浏览维基百科文章的这一部分printf() 。 本文讨论了可以传递给printf()格式字符串的非标准选项,例如(似乎是特定于Microsoft的扩展名): printf(“%I32d\n”, my32bitInt); 它接着说: ISO C99包括inttypes.h头文件,其中包含许多用于独立于平台的printf编码的宏。 …然后列出一组可在所述标题中找到的宏。 查看头文件,使用它们我必须写: printf(“%”PRId32″\n”, my32bitInt); 我的问题是:我错过了什么吗? 这真的是标准的C99方式吗? 如果是这样,为什么? (虽然我从未见过以这种方式使用格式字符串的代码并不感到惊讶,因为它看起来很麻烦……)

%m格式说明符的含义是什么?

此代码的输出打印出“成功”。 char d=’w’; printf(“%m\n”, d);

在c中打印bool结果为’false’或’true’的最佳方法?

我必须编写一个程序,其中main调用其他函数来测试一系列数字(如果有的话)是否小于一个数字,如果所有系列的数字都在两个限制之间,如果有的话是负数。 我的代码返回值为1表示true,0表示false表示,但是赋值会将它们打印为“true”或“false”。 我不知道如何将bool答案作为printf中的字符串打印出来。 我使用if(atl == false)printf(“false”); 在我的at_least.c和main.c中,但它只返回一个长或短的字符串(例如:truetruetrue ….)。 我不确定这是不是正确的编码,我把它放在错误的位置,或者我需要使用其他一些代码。 这是我的主要内容: #include “my.h” int main (void) { int x; int count = 0; int sum = 0; double average = 0.0; int largest = INT_MIN; int smallest = INT_MAX; bool atlst = false; bool bet = true; bool neg = false; int end; while ((end = […]