这个连接函数有什么问题?

时间:2014-09-23 14:27:21

标签: c

char* StrCat(char* dest, char* source)
{
    char* retVal = dest;

    while(*dest)
        dest++;

    while(*dest++ = *source++) ;

    return retVal;
}

int main()
{
    char* a = "One";
    char* b = "Two";

    char* x = StrCat(a, b);

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

    return 0;
}

程序从源到目标复制时第一次崩溃,第二次循环时崩溃。 (Access violation错误)

1 个答案:

答案 0 :(得分:2)

变量a和b的内容(字符串" One"和#34; Two")存储在只读段中,内容受到保护,您无法覆盖其数据。

另外,StrCat()函数没有多少逻辑。

您需要使用全局 char 数组或 char 数组,并将其传递给大小有限的函数,并确保#39;在复制过程中超出其缓冲区大小,否则最终会出现堆栈溢出。

另一种解决方案是使用 malloc 动态分配内存,当你不再需要时,应该释放这个内存。

重新思考如何编写这样的函数来纠正它,但首先解决这个内存问题。