错误分段错误(核心转储)

时间:2017-02-14 20:06:56

标签: c c-strings strcpy

我正在为C大学课程做一些练习,我有以下代码,在用户输入选择(1或2)后退出错误分段错误(核心转储)。 我不知道这是一个问题,我使用的是ubuntu 16.04,我正在使用 make 命令编译我的源代码文件。 哦,请不要建议使用内置的c函数strcpy,因为这个练习应该“教我们”如何制作我们自己的字符串副本。

那么我做错了什么?

#include <stdio.h>
#define SIZE 1000

char mystrcpy(char *dest,char *src);

main(){

    char str1[SIZE];
    char str2[SIZE];
    char str3[SIZE];
    int choice;



    printf("Give first string: ");
    gets(str1);
    printf("Give second string: ");
    gets(str2);
    printf("Choose one of two strings (1 h 2): ");
    scanf("%d",&choice);

    if (choice==1)
        mystrcpy(str3,str1);
    else (choice==2)
        mystrcpy(str3,str2);

    printf("\nFirst string is %s\n",str1);
    printf("\Second string is %s\n",str2);
    printf("\nThrid string is %s\n",str3);

}


char mystrcpy(char *dest,char *src){
    int i;

    while(1)
    {

        dest[i] = src[i];
        if (src[i] == '\0')
            break;

        i++;
    }

    return dest;
}

2 个答案:

答案 0 :(得分:4)

i永远不会被初始化。 (需要30个字符......)

答案 1 :(得分:2)

您没有初始化i,因此它从不确定的值开始,因此是段错误。

请注意,在这个简单的情况下,启用警告会立即显示此问题;在更复杂的情况下,使用调试器会显示崩溃时i的值完全没有意义。