2014-07-22 3 views
-2

사용자가 명령 셸에서 지정한 단어를 쓰려고했지만 어떤 이유로 프로그램이 즉시 read() 함수 다음에 종료되므로 main()의 텍스트가 "main2 \ n"에 있습니다. 결코 쓰여지지 않았다. 나는 약 1 시간 동안 나의 문제를 찾아 내려고 노력했는데 그것을 찾을 수없는 것처럼 보였다.왜 내 쓰기 메소드가 초기화되지 않았습니까?

# include <stdio.h> 

void write_zin(const char* zin,int length_zin){ 
    const char * runner =zin; 
    printf("out of loop\n"); 
    while(runner!=(runner+length_zin)){ 
      printf("%c",*runner); 
      runner++; 
    } 
} 

void read(char* zin,int NUMBER_LETTERS,int NUMBER_WORDS){ 
    int i ; 
    char woord[NUMBER_LETTERS+1]; 
    zin[0]='\0'; 
    for(i =0;i<NUMBER_WORDS;i++){ 
     printf("Give a word with %i letters\n",NUMBER_LETTERS); 
     scanf("%s",woord); 
     strcat(zin,woord); 
     strcat(zin,'\0'); 
    } 
    strcat(zin,'\0'); 
} 


int main(){ 
    const int NUMBER_LETTERS = 5; 
    const int NUMBER_WORDS = 2; 
    char zin[(NUMBER_LETTERS+1)*NUMBER_WORDS]; 
    printf("in main 1\n"); 
    read(zin,NUMBER_LETTERS,NUMBER_WORDS); 
    printf("in main 2\n"); 
    write_zin(zin,(NUMBER_LETTERS+1)*NUMBER_WORDS); 
    printf("in main3\n"); 

    return 0; 
} 
+0

당신이 디버거를 사용하여 시도? –

+2

'strcat (zin, '\ 0');'-이게 무엇을 기대합니까? – ecatmur

+0

@ Mitch, 아직 학교에서 디버거 사용 방법에 대해 생각해 보지 않았습니다. @ ecatmur, 각 단어 뒤에 널 문자를 추가하십시오. – BURNS

답변

2

코드에서 몇 가지 오류가 있습니다

  1. 기능 void read(char* zin,int NUMBER_LETTERS,int NUMBER_WORDS)

당신이 하나의 문자열을 가진 종료됩니다 '\0'에 의해 구분 된 단어를 연결할 경우, 모든 문자열 기능이 있기 때문에 처음에는 '\0'에서 멈추고 더 이상 문자는 처리하지 않습니다.

void read(char* zin,int NUMBER_LETTERS,int NUMBER_WORDS){ 
    int i ; 
    char woord[NUMBER_LETTERS+1]; 
    for(i =0;i<NUMBER_WORDS;i++){ 
     printf("Give a word with %i letters\n",NUMBER_LETTERS); 
     scanf("%s",woord); 
     strcat(zin,woord); 
    } 
} 

2. 기능 void write_zin(const char* zin,int length_zin) 혹시 내부 루프의 상태를 변경할 수 없습니다 : 당신이 마지막 기능이 될 것입니다 문자열 '\n' 같은 다른 특수 문자를 사용 사이의 거리를 표시 할 경우 그래서 당신은 strcat(zin,'\0'); 을 사용할 수 없습니다 고리. 그것이 러너가 항상 루프 내부에서 변화하기 때문에 당신이하는 일이며, 또한 그것은 당신의 상태의 일부입니다.

while(runner!=(runner+length_zin)){ 
     printf("%c",*runner); 
     runner++; 
} 

마지막 기능은 다음과 같습니다

void write_zin(const char* zin,int length_zin){ 
const char * runner =zin; 
printf("out of loop"); 
    while(*runner){ 
     printf("'%c'",*runner); 
     runner++; 
} 

가}

관련 문제