我正在尝试使用指针将一个字符串复制到另一个字符串,但是发生了堆栈粉碎错误,同时成功复制了字符串。
以下是以下代码,
#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);
}
是否由于非法访问指针未指向的内存?
答案 0 :(得分:2)
此char s[]="hellomojo";
与char s[10]="hellomojo";
基本相同。它是一个包含10个字符的数组(包括NUL终结符)。您不能在其中存储超过10个字符。但是你将另一个字符串连接起来,写入数组之外的非法内存位置。这会调用Undefined Behaviour。因此堆栈粉碎问题。
修复方法是增加第一个数组的大小,如:
char s[32] = "hellomojo"; /* 32 chosen arbitrary */
答案 1 :(得分:0)
使用提供的小代码,我的猜测是至少有一个char指针没有足够的分配内存,或者没有按预期的空终止字符。
您显示代码,但输出和错误消息是什么?有了更多信息,调试起来会更容易。