gpt4 book ai didi

c - 为什么这段 C 代码会在不告诉它的情况下将我的变量 lastName 更改为另一个值?

转载 作者:行者123 更新时间:2023-11-30 14:47:24 25 4
gpt4 key购买 nike

当我编译这段代码时,我第三次要求它在告诉它更改之前打印它时,lastName 变量被更改。是什么原因导致这种情况发生?

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

int main(void)
{

char firstName[] = "Bill";

char middleName[] = "Bryan";

char lastName[] = "Max";

char fmName[] = {};

char fmlName[] = {};

printf("%s\n", lastName);

strcat(firstName, middleName);

printf("%s\n", lastName);

strcpy(fmName, firstName);

printf("%s\n", lastName);

strcat(fmName, lastName);

printf("%s\n", fmName);

return 0;

}

输出

>>> Max
>>> Max
>>> BillBryan // <- Why is it printing that lastName is this value when I did not change it?

最佳答案

char firstName[] = "Bill";

这将创建一个包含五个元素的数组:Bill\0.

strcat(firstName, middleName);

这是获取并覆盖末尾的空值,然后溢出。您写入的内存超出了 firstName 的范围。这是undefined behavior ,这意味着任何事情都可能发生。实际上,后面的局部变量可能会被覆盖,这解释了您所看到的症状。但关键是你已经达到了 UB,这意味着任何事情都有可能发生。

关于c - 为什么这段 C 代码会在不告诉它的情况下将我的变量 lastName 更改为另一个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51276547/

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