Tag: 格式

参数化printf中的格式说明符

我有几行输出如下: printf(“%-20s %-20s %-20s %-20s %-20s \n”, “Identity”, “Identity”, “float”, “double”, “long double”); printf(“%-20s %-20s %-20s %-20s %-20s \n”, “Number”, “LHS”, “error”, “error”, “error”); 如你所见,如果我想改变它们之间的间距,我将不得不将数字改为20次。 有没有办法参数化格式说明符? 那么只改变一次会改变它们吗?

输入非ASCII字符到scanf(“%s”)

有没有办法可以向使用%s的scanf发出非asciihex字符? 我正在尝试插入hex字符,如\x08\xDE\xAD等等(以演示缓冲区溢出)。 输入不是命令行参数,而是程序内的scanf。

C中的简单字符解释

这是我的代码 #include void main() { char ch = 129; printf(“%d”, ch); } 我得到输出为-127。 这是什么意思?

(GCC)美元符号printf格式字符串

我在用C编写的源代码中看到了以下行: printf(“%2$d %1$d”, a, b); 这是什么意思?

格式字符串漏洞 – printf

为什么打印内存地址的值为0x08480110? 我不确定为什么有5%的08x参数 – 这会把你带到哪里? address = 0x08480110 address (encoded as 32 bit le string): “\x10\x01\x48\x08” printf (“\x10\x01\x48\x08_%08x.%08x.%08x.%08x.%08x|%s|”); 这个例子来自本文的第11页http://crypto.stanford.edu/cs155/papers/formatstring-1.2.pdf

scanf的问题(“%d \ n”,&i)

对于此代码: int i; scanf(“%d\n”,&i); 在输入两个数字之前,我无法停止我的程序。 我觉得很奇怪,我知道当输入合适时,scanf会返回1.当我输入“12a’Enter”,”12’Enter’2“等等时,没关系,i = 12 ,似乎当我输入的东西是不同的int或输入’Enter’和其他东西时,scanf返回1。 我错过了什么?

像“1 $”这样的位置参数如何与printf()一起使用?

通过man我发现 printf(“%*d”, width, num); 和 printf(“%2$*1$d”, width, num); 是等价的。 但IMO的第二种风格应该是: printf(“%*d”, num, width); 然而通过测试似乎man是对的; 为什么?

什么浮点值使sprintf_s()产生“1.#QO”?

我有一些(遗留嵌入式c)代码,它通过一些sprintf调用生成.csv文件。 偶尔我会看到1.#QO值。 我已经尝试重现那些应该给出负无穷大,正无穷大和NaN的条件的值,但它们似乎都没有给我神奇的1.#QO结果。 那产生这个价值的是什么呢? ……是的,我知道在产生这种价值的数学中显然出现了问题,但理解它的含义将有助于调试工作。 [编辑1]进行转换的实际行是: sprintf_s(txt, CSV_HEADER_SIZE, “%.3f”, value); 哪里: #define CSV_HEADER_SIZE (100) char txt[CSV_HEADER_SIZE]; 我正在使用MS Visual Studio 2008进行编译。 [编辑2]更多挖掘显示0xFFFFFFFF给-1.#QO : unsigned int i = 0xFFFFFFFF; float* f = (float*)&i; printf(“%.3f”, *f); // gives -1.#QO ..并在Visual Studio调试器中查看它将其扩展为-1.#QNAN00所以看起来这可能是微软特定的NaN表示?

如何从输入读取,直到使用scanf()找到换行符?

当我应该从输入读取直到有空格然后直到用户按下回车时,我被要求在C中完成工作。 如果我这样做: scanf(“%2000s %2000s”, a, b); 它将遵循第一条规则而不是第二条规则。 如果我写: 我很聪明 我得到的相当于: a =“我”; b =“am”; 但它应该是: a =“我”; b =“很聪明”; 我已经尝试过: scanf(“%2000s %2000[^\n]\n”, a, b); 和 scanf(“%2000s %2000[^\0]\0”, a, b); 在第一个,它等待用户按Ctrl + D (发送EOF),这不是我想要的。 在第二个,它不会编译。 根据编译器: 警告:’%[‘格式没有关闭’]’ 有什么好办法解决这个问题吗?