以下のプログラムを実行すると、同じIPアドレス出力が表示されます。それは別個のIPを与えると仮定します。printfのシステムコールの出力が異常に動作する
#include<stdio.h>
#include <arpa/inet.h>
int main()
{
struct in_addr ip_1, ip_2;
ip_1.s_addr = 0x300a620a;
ip_2.s_addr = 0x117630a;
printf("ip_1 = %s \t ip_2 = %s\n",inet_ntoa(ip_1), inet_ntoa(ip_2));
return 0;
}
はこのprintf
の何が問題になっている(GCCコンパイラでのLinuxにしようとしましたか)?しかし、以下のような2つのprintf
がある場合、答えは正しいです。
printf("ip_1 = %s\n",inet_ntoa(ip_1));
printf("ip_2 = %s\n",inet_ntoa(ip_2));
ありがとうございました。明らかになった。はい、静的に割り当てられたバッファが原因です。私はこの動作を次のコードで再現できます。 2番目のものは最初のものを上書きします。 char * fun(char * str) { スタティックchar a [10]; strcpy(a、str); リターンa; } int main() { char * ptr1、* ptr2; ptr1 = fun( "hello"); ptr2 = fun( "world"); printf( "ptr1 =%s \ n"、ptr1); printf( "ptr2 =%s \ n"、ptr2); return 0; } –
@GnanaGuruNatarajan Btw。 2つの関数呼び出しのどちらが最初になるかは不明です。私はいくつかの詳細と私の答えを編集します。 – Art