gpt4 book ai didi

c - sscanf 目标地址溢出

转载 作者:太空宇宙 更新时间:2023-11-04 03:12:47 25 4
gpt4 key购买 nike

我正在用 C 语言解析 IP 字符串,我正在使用以下行:

typedef unsigned char UI_8;
UI_8 TFTP_IP_NUMBERS[4];
UI_8 TFTP_IP[15]; // Should be something lige "192.168.12.30"
sscanf(TFTP_IP , "%d.%d.%d.%d", TFTP_IP_NUMBERS[0],
TFTP_IP_NUMBERS[1],
TFTP_IP_NUMBERS[2],
TFTP_IP_NUMBERS[3]);

该行运行良好(它解析正确)但它在不应该写入的地方写入。在带有“XX”的内存地址中,值存储正确,但带有“AA”的内存地址被覆盖“00”。

XX XX XX XX AA AA AA

是什么导致了这种行为?如何避免这种情况

我希望有:

TFTP_IP_NUMBERS = [192,168,12,30]

最佳答案

%d 格式说明符处理一个 int 你传递给它一个 smaller unsigned char, 还有没有正确传递指针(两个错误)。

int ip_parts[4];
sscanf( ip, "%d.%d.%d.%d", &ip_parts[0],
&ip_parts[1],
&ip_parts[2],
&ip_parts[4] ) ;

您可以使用 %hhd 格式说明符直接写入 unisigned char,但并非所有库都支持 hh 大小修饰符,并且将使代码的可移植性降低。您使用 UI8_t 类型的事实表明您可能没有标准的 uint8_t,因此可能没有使用 C99 兼容的库或编译器 - 在这种情况下,%hhu 也可能不起作用。

UI8 ip_parts[4];
sscanf( ip, "%hhu.%hhu.%hhu.%hhu", &ip_parts[0],
&ip_parts[1],
&ip_parts[2],
&ip_parts[4] ) ;

关于c - sscanf 目标地址溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54745723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com