1

我对 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,地址=.....)

4

1 回答 1

7

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

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

char s[128] = "hello";

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

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

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

于 2013-09-03T05:47:51.277 回答