Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用指针在C中复制字符串_C_String_Pointers - Fatal编程技术网

使用指针在C中复制字符串

使用指针在C中复制字符串,c,string,pointers,C,String,Pointers,我是一个初学者程序员。我编写了以下代码,使用指针将一个字符串复制到另一个字符串中。 但是我没有得到输出。编译器说是分段错误。 我一遍又一遍地看这个节目,但都没用。我无法定位故障以及如何修复它。 很难相信,我已经被困了将近两个小时了。 非常感谢您的帮助 #include<stdio.h> char *copy(char*, char*); int main() { char *str1 = "avanti"; char *str2 = "ujj"; pri

我是一个初学者程序员。我编写了以下代码,使用指针将一个字符串复制到另一个字符串中。 但是我没有得到输出。编译器说是分段错误。 我一遍又一遍地看这个节目,但都没用。我无法定位故障以及如何修复它。 很难相信,我已经被困了将近两个小时了。 非常感谢您的帮助

#include<stdio.h>

char *copy(char*, char*);

int main() {
    char *str1 = "avanti";
    char *str2 = "ujj";

    printf("%s\n", str1);

    char *result = copy(str1, str2);

    printf("%s", result);
}

char *copy(char *str1, char *str2){
    int i=0;
    while (*(str2+i) != '\0') {
        *(str1+i) = *(str2+i);
        i++;
    }

    *(str1+i) = '\0';
    return str1;
}
#包括
字符*复制(字符*,字符*);
int main(){
char*str1=“avanti”;
char*str2=“ujj”;
printf(“%s\n”,str1);
char*result=copy(str1,str2);
printf(“%s”,结果);
}
字符*副本(字符*str1,字符*str2){
int i=0;
而(*(str2+i)!='\0'){
*(str1+i)=*(str2+i);
i++;
}
*(str1+i)='\0';
返回str1;
}

“avanti”
是一个字符串常量,不能复制到其中。您可以将其更改为
char str1[]=“avanti”这是一个用字符串常量值初始化的字符数组
“avanti”

,尤其是在执行第一步时,请随意使用
常量。请说出你的名字
src
dest
beat
str1
str2
任何时间。请注意,使用
char str1[]=“avanti”可以,因为它比您复制到其中的内容长。如果您有
char*str2=“alphabet”,即使使用数组也会有问题-缓冲区溢出。另外,使用
str2[i]!='\0’
*(str2+i)!=”更容易阅读\0'
-这两者在效率上没有差别。@JonathanLeffler关于你的第二点,这个问题看起来像是理解语法的练习,所以只使用
*
s似乎是合理的,本身不值得批评,尽管数组语法是很好的补充信息