Tag: 格式说明符

如果我的计算机是32位系统,它有32位地址吗? 但是当我在C中打印任何内存地址时,为什么我的地址<32bit?

例如 printf(“%u”,&a); 给我输出 65524 这是一个16位地址。

scanf – 读取时限制小数位

我知道如何在printf(%xx)中打印值时限制小数和整数。在我的场景中,我想在从控制台读取它时实现它。 那么有什么方法可以在使用scanf函数读取时限制浮点值中的小数位数? 我在下面尝试过,在编译时没有显示任何错误,但总是得到值0 float f1; . . scanf(“%.3f”,&f1); printf(“%3.3f\n”,f1);

可以使用比printf语句中的变量数更少的fomat说明符

我在borland c编译器中编写了以下程序。我怀疑为什么c编译器在编译时或运行时都不会抛出任何错误。程序执行正常,输出为2 4。 #include #include int main(){ int a=2,b=4,c=6; printf(“%d%d”,a,b,c); getch(); return 0; } 尽管格式说明符的数量少于参数的数量,但没有抛出错误。这里发生了什么。

使用sscanf()格式说明符validation电子邮件地址

这可能有点像“修复我的代码”问题,但我看过文档 , 示例和几十个 相关的 问题 ,虽然我在逻辑上或多或少地了解它是如何工作的,但我有麻烦将其转换为C sscanf()格式代码。 我仍然是C的新手,我刚刚开始略微超越简单化的东西,而且我无法找出更复杂的格式说明符(即。 %[^…]等)。 无论如何,这就是我所拥有的: char user[EMAIL_LEN]; char site[EMAIL_LEN]; char domain[4]; if(sscanf(input, “%s@%s.%3s”, user, site, domain) != 3){ printf(“–ERROR: Invalid email address.–\n”); } 为什么不起作用? 我只是想获得一个简单的aaaa@bbbb.ccc格式,但由于某种原因, sscanf(input, “%s@%s.%3s”, user, site, domain)总是评估为1 。 我是否需要使用一些疯狂的%[^…]魔法才能正确转换? 我一直在搞乱%[^@]和那种事情,但我似乎无法让它发挥作用。 任何和所有的帮助表示赞赏。 谢谢!

使用%lu打印int类型 – C + XINU

我有一个给定的代码,在我看来这个代码有问题:我在XINU下编译。 接下来的变量是相关的: unsigned long ularray[]; int num; char str[100]; 有一个函数返回int: int func(int i) { return ularray[i]; } 现在代码是这样的: num = func(i); sprintf(str, “number = %lu\n”, num); printf(str); 问题是我用%lu打印得到大数字,这是不正确的。 如果我将%lu更改为%d ,我会得到正确的数字。 例如:使用%lu我得到27654342,而%di得到26,后者是正确的; 给出变量,给出函数的声明,我写主体但它必须返回int; 我的问题是: 我不熟悉’sprintf’可能有问题吗? 我将unsigned long分配给int然后用%lu打印int,是吗? 我该如何解决这个问题? 提前致谢。 谢谢大家回答。 我只是想提一下我在XINU下工作,我改变了文件编译的顺序和你知道的……它在%lu和%d上工作并显示相同的数字。 我很清楚,将’unsigned long’分配给int然后使用%lu进行打印是不正确的编码,可能会导致数据丢失。 但正如我所说,代码给出,我无法更改变量和打印命令。 我没有错误或警告。 我不知道为什么更改编译顺序修复了问题,如果有人有想法你更欢迎分享。 我要感谢所有试图帮助我的人。

如何用printf打印1个字节?

我知道当使用%x和printf()我们从堆栈中打印4个字节(hex的int )。 但我想只打印1个字节。 有没有办法做到这一点 ?

关于C中的printf格式字符串

我们采取以下计划: #include int main() { long t =57 ; printf(“[%+03ld]”, t); } 它的输出: [+57] 我有点困惑:我告诉他将输出填充到宽度3( 03ld ),用零,但是似乎如果我强制输出在数字( + )之前加一个加号,它将不会添加所需的零如果数字的长度已经是2位数(如57中所示)。 对于数字<10,它填充1为零。 来自http://www.cplusplus.com/reference/cstdio/printf/ (0) – >当指定填充时,用零填充数字(0)而不是空格(参见width子说明符)。 (+) – >即使对于正数,也要在结果前加上加号或减号(+或 – )。 默认情况下,只有负数前面带有 – 符号。 (宽度) – >要打印的最小字符数。 如果要打印的值小于此数字,则结果将填充空格。 即使结果较大,也不会截断该值。 所以我只需要澄清……上面引用的(width)说明符指的是由此格式说明符( “%+03ld” )控制的输出字符串的全长(即:将要打印的字符)或要打印的数字的全长字符?

如果我忘记关闭扫描设备会发生什么?

假设我忘了关闭扫描组的右方括号] 。 那会发生什么? 它会调用未定义的行为吗? 例: char str[] = “Hello! One Two Three”; char s1[50] = {0}, s2[50] = {0}; sscanf(str, “%s %[^h”, s1, s2); /* UB? */ printf(“s1=’%s’ s2=’%s’\n”, s1, s2); 我在编译时收到GCC的警告: source_file.c: In function ‘main’: source_file.c:11:5: warning: no closing ‘]’ for ‘%[‘ format [-Wformat=] sscanf(str, “%s %[^h”, s1, s2); /* UB? */ 和输出为 s1=’Hello!’ […]

c语言中数据类型BYTE,WORD和DWORD的格式说明符?

在C语言中,对于与printf和scanf函数一起使用的数据类型BYTE,WORD和DWORD,最合适的格式说明符是什么? 我很难在控制台上显示BPB字段的值。 例如,如果我尝试使用“%lu”显示BPB_BytsPerSec,我会得到不同寻常的数据。 printf(“Bytes per Sector: %lu”, b->BPB_BytsPerSec); 我得到一个“514”的值,我相信,这是错误的解释..请建议出路。 谢谢。 (我通过MinGW使用gcc 5.1,通过64位Windows) 这是我们正在讨论的结构: /* BPB Structure Collected from internet */ struct BPB_FAT32 { BYTE BS_jmpBoot[3]; // 0 BYTE BS_OEMName[8]; // 3 WORD BPB_BytsPerSec; // 11 BYTE BPB_SecPerClus; // 13 WORD BPB_ResvdSecCnt; // 14 BYTE BPB_NumFATs; // 16 WORD BPB_RootEntCnt; // 17 WORD BPB_TotSec16; // 19 […]

什么是hh和h格式说明符的需要?

使用hhx而不是x的用法是什么,在下面的代码中, mac_str是char指针 , mac是uint8_t数组 , sscanf(mac_str,”%x:%x:%x:%x:%x:%x”,&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]); 当我尝试上面的代码时它发出警告, warning: format ‘%x’ expects argument of type ‘unsigned int *’, but argument 8 has type ‘uint8_t *’ [-Wformat] 但我在他们指定的一些代码中看到了 sscanf(str,”%hhx:%hhx:%hhx:%hhx:%hhx:%hhx”,&mac[0],&mac[1],&mac[2],&mac[3],&mac[4],&mac[5]); 哪个不给任何警告 但两者的工作方式相同,使用hhx代替x的需要是什么,我在网上搜索但没有直接回答