2011-10-28 1 views
0

편집 : 제대로 내 문자를 intilizing 시도에 대해 ... [didnt 한 일이 = (]scanf (% s, lastName);를 사용할 때 세그먼테이션 오류가 발생합니다. (내 몸 코드)

편집 :이 해결 (나는 ... 또 다른 7 시간 내 자신의 질문에 대답 할 수없는)

주석 브라이언에 대한

덕분에, 그 (그것 = 20) ... 상단에 선언 단지 상수입니다.

그것은 내가 입력에 갔다 후 나는 다음 줄을 추가하는 것을 잊었다 때문에 오류가 일어나고 밝혀 이름.

현재 작동 중 = D

:지며 EndEdit (LOL)

내 아래 코드는, 기본적으로 내가 처음 이름에 넣어 코드를했습니다이는 그런 내가 마지막 이름에 넣어

을 찾을 예정이다 ...

로크

하고 최대한 빨리 "로크"는이 오류 안타에 들어갈 때, 나는 어쩌면 내가 더 나은 대안을 scanf와와 사용되어야한다 것 같은 느낌

???

int findPatron(struct Library *lib,struct Patron **p) 
{ 
    int i; 
    char firstName[NAME_LENGTH], lastName[NAME_LENGTH]; 
    printf("\nPlease enter the patron's first name: "); 
    scanf("%s",firstName); 
    printf("\nPlease enter the patron's last name: "); //this line prints... 
    scanf("%s",lastName); //SEGMENTATION ERROR happens here I'm pretty sure. 
    printf("deerrrr"); //this line never prints 
    for(i = 0; i<lib->totalPatrons;i++) 
    { 
      printf("checking %s %s to %s %s",lib->patrons[i].name.first,lib->patrons[i].name.last,firstName,lastName); 
      if((strcmp(lib->patrons[i].name.first, firstName) == 0) && (strcmp(lib->patrons[i].name.last, lastName) == 0)) 
      { 
        **p = lib->patrons[i]; 
        return 0; 
        break; 
      } 
    } 

    return 1; //No Match! 
} 

답변

0

당신은 세그먼트 오류를 ​​ 후 당신의 scanf() 문을 받고 있습니다.

당신이 printf("deerrrr"); 후 모든 것을 제거하고 버퍼가 플러시되도록 그 출력에 \n를 추가하는 경우, 당신은 모든 것이 잘 작동하는지 확인할 수 있습니다 (NAME_LENGTH 제공은 예를 들어 입력이 주어 적어도 6이다).

프로그래밍 부분은 문제를 분리하고 디버그하는 방법을 알고 있습니다.

귀하의 문제는 루프와 lib 구조체에 있습니다. 귀하가하지 말아야 할 내용을 역 참조하고 있습니다.

+0

감사합니다. 문제는 내 루피와 관련이 있었고, 이중 포인터를 사용하고 있었기 때문에 ** p = lib-> 후원자 [i]에 한 번만 사용해야했습니다. * p = & lib-> 후원자 [i]였습니다. – ChrisB92

0

분할 오류가 나는이 라인은 결코 인쇄합니다 확신 여기에서 발생

C의 printf와는 버퍼링, 만 FFLUSH를 명시 적으로 호출 또는 scanf와 같은 차단 조치 (에 의해 플러시 도착하는 AFAIK도 표준 출력을 내 보냅니다.) 오류가 다른 장소에서 발생할 수 있습니다. 디버거를 사용하는 법을 배우십시오. 이것이 바로 C 프로그램을 디버깅하는 올바른 방법입니다.

+0

나는 디버거를 사용하는 것이 훨씬 빠르다는 것을 확신하지만, 작은 printf를 매 30 초마다 만드는 것은 당연한 일이다. (나는 defintitly 내가 사용해야하는 디버거를 사용하는 방법에 대해 알지 못한다. – ChrisB92

관련 문제