[英]Bus error in my own strcat using pointer
我正在做strcat
函数的指针版本,这是我的代码:
void strcat(char *s, char *t);
int main(void) {
char *s = "Hello ";
char *t = "world\n";
strcat(s, t);
return 0;
}
void strcat(char *s, char *t) {
while (*s)
s++;
while ((*s++ = *t++))
;
}
这似乎很简单,但是在我的Mac OS 10.10.3上运行时会出现总线错误。 我不明白为什么...
在你的代码中
char *s = "Hello ";
s
指向位于只读存储器位置的字符串文字 。 所以,问题是双重的
您应该使用长度足够大的数组 (驻留在读写内存中)来保存结果(最终)字符串(不占用内存)。
建议:对于用户定义的函数,请不要使用与库函数相同的名称。 使用其他名称,例如my_strcat()
。
伪代码:
#define MAXVAL 512
char s[MAXVAL] = "Hello";
char *t = "world\n"; //are you sure you want the \n at the end?
接着
my_strcat(s, t);
您要在最后一个addres s指向之后添加't'文本
char *s = "Hello ";
char *t = "world\n";
但是在's'之后写入是未定义的行为,因为编译器可能会将文本放在常量内存中,以您为例,它崩溃了,实际上确实如此。
您应该使用malloc或声明其数组样式来保留s指向的足够内存
char s[32] = "Hello ";
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.