我对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,地址= .....)
答案 0 :(得分:7)
字符串文字是只读,因此尝试修改未定义的行为。不仅如此,它们只是字符串的确切大小(加上一个终结符),因此第一个字符串不适合第二个字符串,因此您将覆盖一些内存,导致更多未定义的行为。
要附加的字符串应声明为数组,大小足以容纳两个字符串。例如:
char s[128] = "hello";
如何仅使用指针并在堆上分配:
char *s = malloc(128);
strcpy(s, "hello");
使用后不要忘记free
分配的内存。