尝试使用指针将一个字符串复制到另一个字符串时检测到堆栈粉碎

时间:2018-06-09 07:40:09

标签: c pointers

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

以下是以下代码,

#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);
}

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

使用提供的小代码,我的猜测是至少有一个char指针没有足够的分配内存,或者没有按预期的空终止字符。

您显示代码,但输出和错误消息是什么?有了更多信息,调试起来会更容易。