C에서 내 대학 과정에 대해 몇 가지 연습을하고 있는데 사용자가 선택 사항 (1 또는 2)을 입력 한 후 Segmentation fault (코어가 덤프 됨)와 함께 종료되는 다음 코드가 있습니다. 내가 우분투 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') –
^^^ Basile이 말한 바입니다. 그것은 또한'else (choice == 2)'가 전혀 의미가 없다는 경고를 줄 것입니다. (그것이 세그 폴트의 원인은 아니지만) –
고마워요! 그거였다! 나는 이것을 튜토리얼의 일부로보고 있었다. 그 녀석은 결코 초기화되지 않았어. Whatevs! 다시 한 번 감사드립니다! –