gpt4 book ai didi

有人可以解释为什么 printf ("%s", str + str[0] - str[3]);在 C 中工作?

转载 作者:行者123 更新时间:2023-12-02 06:12:48 26 4
gpt4 key购买 nike

char *str = "ESPA1";
printf("%s", str + str[0] - str[3]);

我知道输出是 1,但我不明白为什么可以像这样“剪切”字符串的一部分。

最佳答案

首先让我们分解一下表达式:

str + str[0] - str[3]

插入 str[0]str[3] 的值,我们得到:

str + 'E' - 'A'

假设字符以 ASCII 表示,这与:

str + 69 - 65

现在,我们将走捷径并假设这与以下内容相同:

str + (69 - 65)

这给了我们:

str + 4

它是指向数组元素索引 4 的指针,即字符 '1'。所以 printf 从那里开始读取,这就是打印的内容。


现在回到那个快捷方式:

str + (69 - 65)

这不是实际计算的方式。加法和减法具有相同的优先级并且从左到右分组,所以它真的是:​​

(str + 69) - 65

第一个子表达式生成一个指向索引 69 的指针,但是 str 指向的字符串文字没有那么多元素。因此,因为我们创建的指针超过数组末尾 1 个元素,所以代码显示 undefined behavior。 .在这种情况下,您很“幸运”,它按预期工作。

关于有人可以解释为什么 printf ("%s", str + str[0] - str[3]);在 C 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60084914/

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