Tag: printf

为什么printf(“%c”,1)返回笑脸而不是编码char为1

这是我的代码 #include int x,y; int main( void ) { for ( x = 0; x < 10; x++, printf( "\n" ) ) for ( y = 0; y < 10; y++ ) printf( "%c", 1 ); return 0; } 它会回归笑脸。 我到处搜索笑脸的代码或1的代码,但我没有找到任何链接或任何解释为什么1的char值返回笑脸,当1的ascii代码是SOH时。 我研究了这个问题的答案,但我没有找到解释为什么会发生这种情况的答案。

c函数返回格式化字符串

我想做这样的事情: writeLog(printf(“This is the error: %s”, error)); 所以我正在寻找一个返回格式化字符串的函数。

如何在C中打印errno的符号名称?

我可以使用perror()或strerror()来打印属于errno的“人类可读”错误消息,但是如果我还要打印errno的符号名称(例如“ EAGAIN ”)该怎么办? 任何方便的function或宏来做到这一点? 更新:附上我最终编写的代码,基于下面接受的答案及其评论的想法: #include #include #include int get_errno_name(char *buf, int buf_size) { // Using the linux-only gawk instead of awk, because of the convenient // match() functionality. For Posix portability, use a different recipe… char cmd[] = “e= && ” // errno to be inserted here (max digits = 6) “echo ‘#include ‘ […]

printf(“%d”)不显示我输入的内容

我的代码: printf(“Enter a number : “); scanf(“%d”, &number); printf(“%d is what I entered\n”, &number); 我输入2 , 预期输出: 2 is what I entered 实际输出: 2293324 is what I entered 这有什么问题?

自定义支持__attribute __((格式))

GCC和Clang都支持对变量参数函数(如printf进行编译时检查。 这些编译器接受如下语法: extern void dprintf(int dlevel, const char *format, …) __attribute__((format(printf, 2, 3))); /* 2=format 3=params */ 在OSX上,Cocoa框架也对NSString使用了这个扩展: #define NS_FORMAT_FUNCTION(F,A) __attribute__((format(__NSString__, F, A))) 在我们公司,我们有一个自定义C ++框架,其中包含一些类,如BaseString所有类都派生自BaseObject 。 在BaseString有一些类似于sprintf变量参数方法,但有一些扩展。 例如, “%S”需要类型为BaseString*的参数,而”%@”需要BaseObject*参数。 我想对我们项目中的参数执行编译时检查,但由于扩展, __attribute__((format(printf)))给出很多误报警告。 有没有办法为两个编译器之一定制__attribute__((format))的支持? 如果这需要编译器源的补丁,它是否可以在合理的时间内完成? 或者,是否有其他类似工具的lint可以执行检查?

printf太聪明了从char到int?

为什么以下电话: printf(“%d %d”, ‘a’, ‘b’); 导致“正确” 97 98值? %d表示函数必须读取4个字节的数据,而printf不能告诉接收到的参数的类型(格式字符串除外),为什么不打印数字|a||b||junk||junk| ? 提前致谢。

没有正确的原型调用printf会调用未定义的行为吗?

这个无辜的程序是否会调用未定义的行为: int main(void) { printf(“%d\n”, 1); return 0; }

如何检查argv 是否为整数

我正在尝试用C ++创建一个命令行应用程序,我想确保在某个命令参数之后输入是一个整数。 对于此示例,我想检查下一个参数是否是“-p”命令参数后面的整数。 这是我现在代码的片段。 while (count < argc){ if (strcmp("-p", argv[count]) == 0){ has_p = true; //Boolean pid = atoi(argv[count + 1]); if (pid == 0 && argv[count + 1] != "0" ){ err = 1; cout << "pid argument is not a valid input" << endl; pid = -1; } count++; } … } […]

调用printf有多余的参数未定义的行为?

我想知道这是否会产生未定义的行为: printf(“Test %d %s”, 123, “abc”, “def”, “ghi”); 格式字符串后面的前两个参数匹配格式字符串,所以这些都可以; 但第3和第4个参数过多,因为没有更多相应的格式说明符。 IMHO printf()应该简单地忽略这些多余的参数,并且应该没有UB。 它是否正确?

为什么GCC没有优化对printf的这个调用?

#include int main(void) { int i; scanf(“%d”, &i); if(i != 30) { return(0); } printf(“i is equal to %d\n”, i); } 结果字符串似乎总是“我等于30”,那么,为什么GCC不会通过调用puts()或write()来优化对printf的调用? (刚刚使用gcc -O3 (版本5.3.1)或Godbolt Compiler Explorer检查生成的程序集)