Tag: printf

inet_ntoa使用奇怪的printf行为

#include #include #include #include #include int main(int argc, char **argv) { struct sockaddr_in X = {0}; X.sin_family = AF_INET; X.sin_addr.s_addr = inet_addr(“127.0.0.1”); X.sin_port = htons(8080); struct sockaddr_in Y = {0}; Y.sin_family = AF_INET; Y.sin_addr.s_addr = inet_addr(“212.43.159.20”); Y.sin_port = htons(80); printf(“X:Y %s:%s\n”, inet_ntoa(X.sin_addr), inet_ntoa(Y.sin_addr)); printf(“X %s\n”, inet_ntoa(X.sin_addr)); printf(“Y %s\n”, inet_ntoa(Y.sin_addr)); return 0; } 为什么第一个pritnf打印相同的IP两次而不是给出什么? 第二和第三似乎没问题。 似乎发生在linux […]

printf,如何为整数插入小数点

我有一个UINT16无符号整数 4455, 312, 560 or 70. 如何使用printf在最后两位数之前插入小数点,以便示例数字显示为 44.55, 3.12, 5.60 or 0.70 如果没有printf解决方案,还有其他解决方案吗? 我不想使用浮点数。

为什么printf()之后的行是对sleep()的调用,在打印之前执行?

我以为我在这里做了一些简单的事情,但C决定对我进行异步操作。 我不确定发生了什么事。 这是我的代码: #include int main() { printf(“start”); sleep(5); printf(“stop”); } 当我编译并运行时,我注意到sleep(5)就像魅力一样。 但是编译器决定跳过第一个printf()并且出现故障是个好主意,因此在运行时,程序会等待5秒然后打印startstop 。 这是怎么回事? 我的理论是程序用shell启动打印操作,然后继续执行程序,让Bash等到程序不再忙于实际渲染字符串。 但我真的不知道。 谢谢

为什么交错的scanf()+ printf()语句导致两个scanf()调用先执行,然后两个printf()调用?

您可以在以下代码中解释一件事: #include int main() { int n;char ch,ch1; scanf(“%d\n”,&n); printf(“d-%d \n”,n); scanf(“\n%c”,&ch); printf(“ch-%d \n”,ch); scanf(“\n%c”,&ch1); printf(“ch1-%d \n”,ch1); printf(“%d %d %d\n”,n,ch,ch1); return 0; } 为什么在输入n的值之后,它直接要求ch的值然后直接执行语句来打印它们各自的值,即语句: printf(“d-%d \n”,n); printf(“ch-%d \n”,ch);

在c中使用scanf读取浮点数

我有一个包含浮点变量的结构, struct MyStruct{ float p; }newMyStruct; 我正在使用scanf读取一个值 int main(){ scanf(“%f”,&(newMyStruct.p)); } 问题是当我使用printf(“%f”,newMyStruct.p)打印它时printf(“%f”,newMyStruct.p)它打印’0.000000’。 另外我得到一个警告,说格式是双重的,而格式期望它是浮点数(警告scanf(“%f”,&(newMyStruct.p));语句)。当我将scanf()语法更改为scanf(“%0f”,&(newMyStruct.p)); , printf(“%0f”,newMyStruct.p); 正确打印浮点值但编译器给出了另一个警告(与精度为0的相关内容)。 printf(“%2f”,newMyStruct.p)也以其他格式打印浮点数。 所以,我的问题是我如何摆脱所有这些警告,并阅读一个适当的浮动变量,也可以正确打印。 我无法访问我通常编码的笔记本电脑,因此我无法提供正确的警告。

使用带有%i的scanf捕获日期时的问题(mm dd yyyy)

我正在编写一个计算两个日期之间经过的天数的程序。 为此,我必须在如下定义的结构中将日期作为整数输入: struct date { int month; int day; int year; }; 现在,我已经想出了如何运行我的程序,但是当月或日是单个数字时,用户无法以(mm dd yyyy)格式输入日期,这真让我烦恼。 让我告诉你我的代码(请不要介意调试printf语句): printf(“Enter your start date (mm dd yyyy)\n”); scanf(“%i %i %i”, &startDate.month, &startDate.day, &startDate.year); // DEBUG printf(“Start date = %i/%i/%i\n”, startDate.month, startDate.day, startDate.year); // DEBUG printf(“start date month = %i”, startDate.month); printf(“Enter your end date (mm dd yyyy)\n”); scanf(“%i %i […]

没有参数的`printf(“%p”)`的含义是什么?

我当然知道它用于输出带参数的指针。 我读过迈克尔霍华德和大卫勒布朗的书“ 编写安全代码” 。 书中的一个程序演示了strcpy()如何处理堆栈溢出 注意没有参数的printf() 。 #include #include void foo(const char* input) { char buf[10]; //What? No extra arguments supplied to printf? //It’s a cheap trick to view the stack 😎 //We’ll see this trick again when we look at format strings. printf(“My stack looks like:\n%p\n%p\n%p\n%p\n%p\n% p\n\n”); //Pass the user input straight to secure […]

请解释这个结果。 printf(“%c”,“abcd”)

#include int main() { printf(“%c\n”, ‘abcd’); printf(“%p\n”, ‘abcd’); printf(“%c\n”, 0x61626364); printf(“%c\n”, 0x61626363); printf(“%c\n”, 0x61626365); return 0; } 我想问这一行:printf(“%c \ n”,’abcd’); 在这一行中,结果是“d”但是,我无法理解为什么’d’会出现。 我试着看看其他的回忆。 在这种情况下,我发现其他记忆都包含所有字母。 请解释一下为什么结果是’d’以及为什么其他记忆都有所有字母。 谢谢。

printf的参数数量错误会导致奇怪的结果

#include int main() { int i=10,j=20; printf(“%d%d%d”,i,j); printf(“%d”,i,j); return 0; } 使用Turbo C编译器,输出如下: 10 10 garbageValue 20 有人可以解释为什么会这样吗?

当我在printf()中的字符串后面添加带加号的int时会发生什么

我已经在混淆程序中读了下面的代码。 我想知道为什么编译器在我这样做时给了我一个警告而不是一个错误。 代码真正想做什么以及为什么编译器建议我使用数组? #include int main() { int f = 1; printf(“hello”+!f); return 0; } warning: adding ‘int’ to a string does not append to the string [-Wstring-plus-int] printf(“hello”+!f); ~~~~~~~^~~ note: use array indexing to silence this warning printf(“hello”+!f); ^ & [ ]