gpt4 book ai didi

c - scanf 上的段错误并非在所有系统上都存在

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

此代码会在我的 Ubuntu、Gentoo、Windows 7 64 位(MinGW gcc 非常旧的版本 3.6)上导致段错误,但不会在我 friend 的 Windows 7 64 位(MinGW gcc 4.6)上导致段错误。

这是代码(实际上我不明白这如何在我 friend 的系统上工作,str显然没有分配)。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main() {
char *str, *str1, *str2;

printf(">>> ");
scanf("%­s", str);

for(str1 = str, str2 = strlen(str)+str-1; str2>str1; ++str1, --str2) {
*str1 ^= *str2;
*str2 ^= *str1;
*str1 ^= *str2;
}

printf("<<< %­s", str);

return 0;
}

提前谢谢您。

编辑:他刚刚向我发送了他的 .exe,实际上每次都有效,我启动了大约 20 次。我无话可说。

最佳答案

此代码调用未定义的行为。一旦 UB 被调用,那么所有的赌注都会被取消。什么事情都可能发生。行为可能会因编译器的不同而有所不同,甚至在同一编译器的不同版本上,您可能会得到不同的结果,无论是预期的还是意外的、段错误、程序崩溃等。

关于c - scanf 上的段错误并非在所有系统上都存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22689467/

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