gpt4 book ai didi

字符 *a, *b; (b-a) 是什么类型,我该如何打印它?

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

{
char *a, *b;

printf("%lx\n",(b-a));
}

通常有效,事实上,我无法想象它会在 32 位或 64 位机器上发出警告或失败。但对于 ANSI C 和大小感知来说,这是正确的做法吗?我希望这段代码能够在所有可能的平台上运行,包括非 Unix 和嵌入式系统。

最佳答案

b - aptrdiff_t ,您可以使用 %td 打印在你的printf格式。来自规范第 6.5.6 节 Additive operators:

When two pointers are subtracted, both shall point to elements of the same array object, or one past the last element of the array object; the result is the difference of the subscripts of the two array elements. The size of the result is implementation-defined, and its type (a signed integer type) is ptrdiff_t defined in the <stddef.h> header.

对于 printf和相关函数,第 7.19.6 节格式化输入/输出函数:

t Specifies that a following d, i, o, u, x, or X conversion specifier applies to a ptrdiff_t or the corresponding unsigned integer type argument; or that a following n conversion specifier applies to a pointer to a ptrdiff_t argument.

我进一步查看了规范,它似乎表明两个指针的差异甚至可能不适合 ptrdiff_t。 ,在这种情况下,行为是未定义的:

J.2 Undefined behavior
- The result of subtracting two pointers is not representable in an object of type ptrdiff_t (6.5.6).

虽然我无法想象可能出现的任何实现。我想你可以查看 PTRDIFF_MINPTRDIFF_MAX<stdint.h>非常确定。

关于字符 *a, *b; (b-a) 是什么类型,我该如何打印它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1645669/

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