gpt4 book ai didi

c - 尝试使用指针将一个字符串复制到另一个字符串时检测到堆栈崩溃

转载 作者:行者123 更新时间:2023-11-30 18:46:33 25 4
gpt4 key购买 nike

我尝试使用指针将一个字符串复制到另一个字符串,但在字符串复制成功的同时发生了堆栈粉碎错误。

下面是代码,

#include <stdio.h>
void strcat(char *str1, char *str2) {
char *run = str1;
while(*run !='\0')
run++;
while(*str2 !='\0') {
*run = *str2;
run++;
str2++;
}
*run = '\0';
}
int main() {
char s[] = "hellomojo";
char t[] = "world";

printf("\ns :%s", s);
printf("\n t :%s",t);
strcat(s, t);
printf("\ns after:%s",s);
}

是否是由于非法访问了指针未指向的内存?

最佳答案

这个char s[]="hellomojo";char s[10]="hellomojo";基本相同。它是一个 10 个字符的数组(包括 NUL 终止符)。您不能在其中存储超过 10 个字符。但是您将另一个字符串与该字符串连接起来,写入数组之外的非法内存位置。这会调用 Undefined Behaviour 。因此出现了堆栈崩溃问题。

修复方法是增加第一个数组的大小,例如:

char s[32] = "hellomojo"; /* 32 chosen arbitrary */

关于c - 尝试使用指针将一个字符串复制到另一个字符串时检测到堆栈崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50772015/

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