gpt4 book ai didi

c - 为什么这会导致段错误

转载 作者:行者123 更新时间:2023-11-30 18:29:32 24 4
gpt4 key购买 nike

#include <stdio.h>
#include "../library/string.c"

int test(char* left, char* right) {
while ( *left != '\0') {
printf("%p\t%d, %d\n", left, (*left) + 1, *left);
left++;
}
return 0;
}

int main() {
char* a = "hello,kittz";
char* b = "hello,kitty";
test(a, b);
return 0;
}

当我执行上面的代码时,输​​出如下:

0x40073f    105, 104
0x400740 102, 101
0x400741 109, 108
0x400742 109, 108
0x400743 112, 111
0x400744 45, 44
0x400745 108, 107
0x400746 106, 105
0x400747 117, 116
0x400748 117, 116
0x400749 123, 122

但是当我将代码更改为:

int test(char* left, char* right) {
while ( *left != '\0') {
printf("%p\t%d, %d\n", left, (*left)++, *left);
left++;
}
return 0;
}

输出告诉我发生了错误。这是输出:段错误(核心转储)。

最佳答案

(*left)++

正在尝试更改left指向的值 - 即它正在尝试将编译时文字“k”更改为“l”。这是不允许的(严格来说它的“未定义行为” - 这意味着它有时可能在某些系统上工作,或者它可能会格式化您的硬盘驱动器,或者点亮白宫草坪上的圣诞树......)

关于c - 为什么这会导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37465574/

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