[英]C - repeated printf() with %s and char *
char * src_addr;
char * dst_addr;
src_addr = inet_ntoa(ip->ip_src);
printf("src: %s\n", src_addr);
dst_addr = inet_ntoa(ip->ip_dst);
printf("dst: %s\n", dst_addr);
printf("src: %s\n", src_addr);
這將在第三個printf語句中輸出dst_addr。 難道我做錯了什么?
從文檔中:inet_ntoa()返回靜態緩沖區中的點和數字字符串,該字符串在每次調用該函數時都會被覆蓋。
因此,在您的情況下,第二次調用inet_ntoa會為您提供一個新字符串,但在同一緩沖區中,因此dst_addr指向與src_addr相同的名稱,而src_addr現在都指向新的目標字符串。
我假設您正在使用IPv4。 該功能不適用於IPv6; 為IPv6使用inet_ntop()
或inet_pton()
。
該函數返回一個指向靜態內部緩沖區的指針, inet_ntoa()
會不斷重復使用該內部緩沖區。 您的src_addr
和dst_addr
都將指向同一緩沖區,並且由LAST調用inet_ntoa()
創建的字符串將存儲在此處。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.