2017-02-14 12 views
0

Cで私の大学コースの演習を行っています。ユーザーが選択肢(1または2)を入力した後、エラーセグメンテーションフォルト(コアダンプ)で終了する次のコードがあります。 私はubuntu 16.04を使用していて、ソースコードファイルをでコンパイルしようとしているのかどうかわかりません。コマンドです。 ああとビルトイン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; 
} 
+3

すべての警告とデバッグ情報( 'gcc -Wall -Wextra -g')でコンパイルしてください。警告を表示しないようにコードを改善する。デバッガを使用する**( 'gdb') –

+2

^^^バジルが言ったこと。それはまた、 'else(choice == 2)'が全く意味を持たないという警告を与えます。 (それはセグメンテーションの原因ではありませんが) –

+0

ありがとう!それだった!私はチュートリアルの一部としてこれを見ていました。その男は私を初期化したことはありません。 Whatevs!再度、感謝します! –

答えて

2

それは不定値から始まるので、あなたはそれ故にセグメンテーションフォルト、iを初期化されていません。

warniを有効にすることに注意してくださいこの単純なケースではすぐにこの問題が発生していました。デバッガを使用するより複雑なシナリオでは、クラッシュの瞬間のiの値は完全に無意味であったはずです。

4

iが初期化されることはありません。(.... 30個の文字を必要とする)

関連する問題