EXC_BAD_ACCESS(代码2,地址= .....)

时间:2013-09-03 05:45:06

标签: c

我对C编程很陌生,并尝试运行一个简单的程序,它将字符串t放在字符串s的末尾:

#include <stdio.h>

void _strcat(char *s, char *t){
    for(;*s;s++);
    for(;(*s=*t)!='\0';s++,t++);

}

int main()
{
    char *s="hello";
    char *t="how are you?";

    _strcat(s,t);

    getchar();
    return 0;
}

但是我经常会因为分配两个指针(同一类型)而感到恼人的错误*s=*t; 这是错误:

线程1:EXC_BAD_ACCESS(代码2,地址= .....)

1 个答案:

答案 0 :(得分:7)

字符串文字是只读,因此尝试修改未定义的行为。不仅如此,它们只是字符串的确切大小(加上一个终结符),因此第一个字符串不适合第二个字符串,因此您将覆盖一些内存,导致更多未定义的行为。

要附加的字符串应声明为数组,大小足以容纳两个字符串。例如:

char s[128] = "hello";

如何仅使用指针并在堆上分配:

char *s = malloc(128);
strcpy(s, "hello");

使用后不要忘记free分配的内存。