gpt4 book ai didi

c - 使用 MinGW 的 CodeBlocks 中 strcpy 函数的异常行为

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

CodeBlocks 中 MinGW 的 strcpy 函数运行不正常。当目标的空间小于源字符串时,它会修改常量字符串。根据标准,如果 Destination 的空间小于源的空间,则行为未定义,但是为什么 Source(S)(被 strcpy 函数接受为常量)会被修改?

#include<string.h>
#include<stdio.h>
int main(){
char S[]="Computer";
char D[]="";
strcpy(D,S);
printf("%s\n",S);
return 0;
}

输出: When size of D(Destination) is equal or more than size of S(source)

输出: When size of D is less than size of S

输出:计算机[当未指定 D 的大小时]

最佳答案

试图理解未定义的行为是毫无意义的。根据定义,该行为是“未定义的”。

我的猜测是,栈帧中为SD分配的内存如下:

| D  |                S                   |
+-- -+---+---+---+---+---+---+---+---+----+
| \0 | C | o | m | p | u | t | e | r | \0 |
+-- -+---+---+---+---+---+---+---+---+----+

当您修改D超出有效限制时,您就结束修改S的内容。

虽然这对于您的平台可能是正确的,但不能保证在其他平台上也是正确的。底线:当标准明确指出特定行为是未定义行为时,不要指望它

关于c - 使用 MinGW 的 CodeBlocks 中 strcpy 函数的异常行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34985893/

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