gpt4 book ai didi

c - 循环 char* 给我访问冲突写入位置 0x00CFB310

转载 作者:行者123 更新时间:2023-11-30 20:04:15 25 4
gpt4 key购买 nike

我尝试打印简单的 c* 字符串,如下所示:

char *cc = "HEllo";

for (char* inputPtr = cc; inputPtr[0]; inputPtr++) {
char c = inputPtr[0]++;
printf("%s",c);
}

但我得到:访问冲突写入位置 0x00CFB310。于:

char c = inputPtr[0]++;

这里出了什么问题?

最佳答案

您似乎正在尝试使用 inputPtr[0] 作为 *inputPtr 的替代品。在许多情况下,这两个表达式产生相同的结果。

但是,表达式 inputPtr[0]++*inputPtr++ 不同,因为 [0]higher precedence* 低,但与后缀 ++ 具有相同的优先级。此优先级内的运算符按从左到右的顺序应用,因此第一个表达式在 inputPtr[0](字 rune 字中的一个字符)后递增。这是未定义的行为,因此您会看到崩溃。

如果将 inputPtr[0]++ 替换为 *inputPtr++ 并从循环头中删除 inputPtr++,您的代码将正常工作:

for (char* inputPtr = cc; inputPtr[0]; ) {
char c = *inputPtr++;
printf("%c", c); // Replace %s with %c to print one character
}

关于c - 循环 char* 给我访问冲突写入位置 0x00CFB310,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42594540/

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