gpt4 book ai didi

c - 使用 scanf %p UB

转载 作者:行者123 更新时间:2023-12-04 11:16:17 24 4
gpt4 key购买 nike

来自 C11 标准(草案):7.21.6.2/12 :

If the input item is a value converted earlier during the same program execution, the pointer that results shall compare equal to that value; otherwise the behavior of the %p conversion is undefined.

有人可以提供这部分标准的代码吗?也无法理解从输入中获取 %p 的用途。

最佳答案

首先,这是一个使用字符串版本的输入和输出 (demo) 的小演示:

int val = 123;
char buf[100];
sprintf(buf, "%p", (void*)&val);
printf("Original =%s\n", buf);
void *ptr;
sscanf(buf, "%p", &ptr);
printf("Read back=%p\n", ptr);
int *iPtr = ptr;
if (iPtr == &val) {
printf("Pointers match\n");
}

顶部的sprintf将指针写入输出缓冲区; sscanf 读回它。

输入 sscanf 的字符串与 sprintf 生成的字符串完全匹配,因此标准保证 iPtr == &val 正在运行评估为 true,并且定义了行为。传递与同一运行程序生成的任何内容都不匹配的字符串将是未定义的行为。

关于c - 使用 scanf %p UB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42167100/

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