Tag: 格式

如何在C中垂直打印?

我必须在一个循环中打印我想要以两行打印输出,而不是在一行上混合。 像这样: printf(“| %-7.2f “, Fahrenheit); 产生: | -508.00 | -463.00 | -418.00 | -373.00 | -328.00 | -283.00 | 当我添加printf(“| %-6d”, Celsius); 在上面的printf下面,它打印在我的第一个printf的中间/中间。 我希望输出如下: | -508.00 | -463.00 | -418.00 | -373.00 | -328.00 | -283.00 | | -300 | -275 | -250 | -225 | -200 | -175 | -150 | -125| 而不是将两组值混合在同一条线上。 […]

如何格式化汇编代码?

我有一个用汇编语言编写的相当长的代码,我想在使用asm()函数的C程序中使用它,但是必须引用代码中的每一行,并且必须插入一个新行字符(’\ n’)每行的结尾以使其可用。 是否有任何文本编辑工具可以执行此操作,或者我必须手动执行此操作?

使用%d扫描字符

我在下面有一个具体的例子,如果输入整数(参见output1),它可以正常工作,当我尝试使用scanf函数调用中的%d说明符扫描一个字符时,我得到下面的输出2。 所以,我的问题是如果输入一个char我希望类型说明符应该将它转换为等效的int值,如果不是垃圾值,即使在任何一种情况下它应该print / segfault。 但是,在这里我得到了连续的打印,我觉得这是错误的,因为scanf每次都被绕过。 我很不确定在后台发生了什么,并且想知道同样的事情。 #include int main() { int a; while (1){ printf(“enter a number:”); scanf(“%d”, &a); printf(“entered number is %d\n”, a); } return 0; } 输出1 : > enter a number:1 > entered number is 1 > enter a number: > 3 > entered number is 3 > enter a number:4 > […]

可以使用比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; } 尽管格式说明符的数量少于参数的数量,但没有抛出错误。这里发生了什么。

scanf(“%d”,char *) – char-as-int格式字符串?

char-as-number的格式字符串修饰符是什么? 我想使用sscanf读取一个永远不会超过255(实际上更少)的数字到一个unsigned char类型变量中。 使用典型 char source[] = “x32″; char separator; unsigned char dest; int len; len = sscanf(source,”%c%d”,&separator,&dest); // validate and proceed… 我收到了预期的警告:sscanf的参数4是char *类型,int *是预期的。 据我了解的规格,char没有修饰符(比如%sd表示简短,或%lld表示64位长) 危险吗? (溢出只会溢出(翻转)变量,还是会在分配的空间外写?) 有没有比分配临时int变量更美妙的方法? ……或者你会建议一个完全不同的方法吗?

如何根据参数列表validation用户提供的printf格式字符串?

我有一个数字列表,并希望为我的用户提供输入printf样式格式字符串的选项,以指定数字的输出方式。 如何根据参数列表validation用户提供的格式字符串? 格式错误的输入不应该使程序崩溃,我想避免任何格式字符串攻击。 我不关心validation是否仅处理POSIX或编译器特定超集中指定的格式选项。 是否有任何图书馆电话要求,或者我必须自己写吗? 澄清:我需要的是这样的: float var1, var2, var3, var4; // var1 .. var2 are given by the program const char * userSupplied = getFormatStringFromUser(); if( isValidFormat( userSupplied, “float”, “float”, “float”, “float” ) ) printf( userSupplied, var1, var2, var3, var4 ); else printf( “The format you gave was invalid!\n” ); 在这个例子中,我知道我有四个花车。 我想允许任何只引用0到4个浮点数的格式。 因此isValidFormat()应允许以下格式字符串: “%f%g%e%.1f” […]

是否有一个printf说明符要求浮点数不是双倍?

当我使用带有float类型参数的snprintf “%f”说明符时,我得到MISRA类型错误。 根据我的研究,MISRA是正确的,因为“%f”预示着一种double类型。 是否有浮点说明符或修饰符将使用float类型参数而不是double ? 我正在研究嵌入式系统,并且不想将32位浮点数转换为64位double精度,只是为了取悦snprintf函数。 代码打印到调试/控制台端口,这是转换发生的唯一位置。 对于那些需要代码示例的人: // This section is for those C++ purists and it fulfills the C++ tag. #if __cplusplus #include #else #include #endif #define BUFFER_SIZE (128U) int main(void) { char buffer[BUFFER_SIZE]; float my_float = 1.234F; // The compiler will promote the single precision “my_float” // to double precision before passing […]

PE格式 – IAT问题

我正在尝试为Windows编写一个exe包装器。 到目前为止,我已经掌握了一些基础知识。 我要做的部分是阅读“BOUND IMPORT目录表”(或.idata部分?),基本上是PE文件的一部分,其中包含加载程序需要导入的DLL列表。 我想知道最好的方法是: [A]找出IAT的位置(因为针对几个不同的.exe运行PEView似乎表明这个列表可以包含在多个不同的地方)然后读取列表 要么 [B]找到一种直接读取exe需要导入的DLL列表的方​​法。 有办法做到这一点吗? 有没有进一步的阅读,人们可以推荐IAT应该在哪里,如何读取它?

将原始数据打印到固定长度的hex输出

我有一个结构,指向结构的指针,我希望将前n个字节作为长hex数字打印,或者作为hex字节的字符串。 基本上我需要printf等效的gdb的检查内存命令,x / nxb。 如果可能的话,我仍然希望使用printf作为程序的记录器function,只是它的变体。 如果我可以在不循环数据的情况下这样做,那就更好了。

汇编,多个参数-m32 / linux(与C中的stdarg相同)

为了解决这个问题,我理解C,我仍然是大会的初学者,所以我在这里遇到了一个小问题。 我在使用多个参数时遇到了一些麻烦,如果我应该这样做,可能会计算它们,并在汇编代码中使用format参数。 尝试将一些字节添加到具有许多参数的字符串中。 我知道如何将两个第一个参数放在堆栈上,但是第一个参数之后的其他参数是格式(如%s,%d,%c等),第一个参数是应该是变量i的那个想写信给。 在C中,标准main具有参数计数器。 我可能想在这里算一下这些论点!? 我怎么能这样做,如果这是怎么做的? .globl minisprintf # Name: minisprintf # Synopsis: A simplified sprintf # C-signature: int minisprintf(unsigned char *res, unsigned char *format, …); # Registers: AL: for characters # %ECX: first argument, res # %EDX: second argument, args # minisprintf: # minisprintf pushl %ebp # start of movl %esp, %ebp # […]