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;
}
すべての警告とデバッグ情報( 'gcc -Wall -Wextra -g')でコンパイルしてください。警告を表示しないようにコードを改善する。デバッガを使用する**( 'gdb') –
^^^バジルが言ったこと。それはまた、 'else(choice == 2)'が全く意味を持たないという警告を与えます。 (それはセグメンテーションの原因ではありませんが) –
ありがとう!それだった!私はチュートリアルの一部としてこれを見ていました。その男は私を初期化したことはありません。 Whatevs!再度、感謝します! –