我实现了一个简单的strcpy,但是当我运行它时,它总是会出现分段错误。 请帮忙!
以下是我的代码:
#include <stdio.h>
char* mystrcpy(char *dst, char *src){
char *ptr = dst;
while (*src !='\0') {
*dst = *src;
dst++;
src++;
}
return ptr;
}
int main (int argc, char **argv) {
char *str1 = "abc";
char *str2 = "def";
char *str3 = NULL;
str3 = mystrcpy(str2, str1);
printf("str2 now is %s", str2);
printf("str3 is %s", str3);
return 0;
}
答案 0 :(得分:9)
这些是只读的。写入它们会导致未定义的行为。
char *str1="abc"; /* Read-only. */
char *str2="def";
while (*src !='\0') {
*dst = *src; /* Writes into read-only memory. */
请参阅此C FAQ:
字符串常量实际上是常量。编译器可以将它们放入 不可写入的存储,因此修改它们是不安全的。
another explanation。你应该试试
char str1[]="abc";
char str2[]="def";
答案 1 :(得分:-3)
while(* src!='\ 0'){
* DST = *的src; 击>
你需要在这里取消引用你的指针,使用&amp;,而不是*
击>
编辑:
看起来我有自己的个人头颅分割错误,这里 - 早上太早了!
cnicutar的解释(用char *str2 = "def";
指定一个字符串常量的指针,然后尝试写入该位置)更加合理......