gpt4 book ai didi

c - 关于 printf ("%s"的法律论证的几个问题,...)

转载 作者:太空狗 更新时间:2023-10-29 17:21:36 25 4
gpt4 key购买 nike

我正在创建修改后的 printf 实现,但我不确定这些问题的答案。

  1. 零是否可以用作空字符串? (是否允许 printf("%s", 0)?)

    我猜不是,因为 0 是一个 int。但是这会提示这个问题:

  2. NULL 是否用作空字符串? (是否允许 printf("%s", NULL)?)

    从逻辑上讲,我认为应该是,因为NULL隐含了一个指针;但是很多实现似乎都有#define NULL 0,所以我觉得实际上可能不是。哪个是正确的?

  3. 指针类型指向char吗? (是否允许 printf("%s", (void const *)"")?)

    我的猜测是类型无关紧要,但我不确定。

最佳答案

情况 1 是未定义的行为,因为参数的类型 (int) 与格式说明符 (char *) 所需的类型不匹配。

出于同样的原因,情况 2 是未定义的行为。 NULL 允许被定义为任何值为 0 的整数常量表达式,或转换为 (void *) 的表达式。这些类型都不是 char *,因此行为未定义。

出于同样的原因,案例 3 是未定义的行为。 "" 生成指向空终止字符数组(字符串)的有效指针,但是当您将其转换为 const void * 时,它不再具有匹配的正确类型格式字符串。因此行为是未定义的。

关于c - 关于 printf ("%s"的法律论证的几个问题,...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12222447/

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