簡體   English   中英

C-使用%s和char重復printf()*

[英]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_addrdst_addr都將指向同一緩沖區,並且由LAST調用inet_ntoa()創建的字符串將存儲在此處。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM