gpt4 book ai didi

c - 此输出背后的原因

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

我做了一个测试,结果是这样的:

char* trim(char* strr, char* str1) {
char* s = strr;
while(*str1 == 32) str1++;
while( (*str1 != 32) && (*str1 != 0) )
*s++ = *str1++;
*s = 0;
return strr;
}

int main(void) {
char str[20] = "???";
char str1[20] =" bcd \0";

printf("(%s)\n(%s)\n", str, trim(str, str1));
return(0);
}

问题是:上面的代码会打印什么,为什么?我得到了关于输出的线索以及原因,但我想听听更多关于这个主题的有经验的人的意见。

乍一看它会打印:

(???)
(bcd)

但实际上产生的输出是:

(bcd)
(bcd)

最佳答案

[编辑:删除了之前的答案,@Nigel Harper 礼貌地指出这完全是胡说八道。]

printf 的参数(所有参数)在开始执行 printf 之前以某种未指定的顺序求值。因此,当 printf 开始执行时,str 和(重要的)trim(str, str1) 都已被求值。

因为 trim(str, str1) 修改了 str 指向的内存,所以当 printf 本身正在执行时,内存str 指向的内容将被修改为包含 bcd(显然,从 trim(str, str1) 返回的指针也将).

因此,无论两个参数的求值顺序如何,两个输出都将是bcd

关于c - 此输出背后的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15914511/

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