2014-09-25 76 views
0

任何人都可以解釋爲什麼當我嘗試打印字符串的值時讀取:(null)(null)(null)?printf()僅在我的while循環中打印空值

這裏是我的代碼:

char 
translate(char *fileName2) 
    { 
    char *str1; 
    int counted; 
    int count; 
    int printed; 
    int i; 
    FILE * fp; 
    i = 0; 
    count = 0; 
    counted = 0; 
    printed = 0; 
    fp = fopen(fileName2, "r"); 
    do 
    { 
     if (!feof(fp)&&counted==0) 
     { 
       count+=1; 
       readToken(fp); 
     } 
     else 
     { 
      counted=1; 
     } 
    } 
    while (counted==0); 
    printf("there are %d words in the file %s\n",count,fileName2); 
    do 
    { 
    if (i<count) 
     { 
      //Problem here 
      printed=0; 
      i+=1; 
      str1 = readToken(fp); 
      printf("%s ",str1); //THIS IS WHERE THE NULL GETS PRINTED!! 
      //free(str1); 
     } 
     else 
     { 
      printed=1; 
      printf("file has been printed\n"); 
      printf("value of count here is:%d\n",count); 
      printf("value of i here is:%d\n",i); 
     } 
     } 
    while(counted==1&&printed==0); 
    fclose(fp); 
    return(0); 
    } 

我真的不明白爲什麼它給我(空)爲str1中值當我嘗試打印。有可能是一個更好的方式來做到這一點,但我不是最先進的,因此任何建議,將不勝感激...謝謝:)

編輯: 這裏是readToken()的代碼

char * 
readToken(FILE *fp) 
{ 
int ch,index; 
char *buffer; 
int size = 80; 

skipWhiteSpace(fp); 

ch = fgetc(fp); 
if (ch == EOF) return 0; 

buffer = allocateMsg(size,"readToken"); 

index = 0; 
while (!isspace(ch)) 
    { 
    if (ch == EOF) break; 
    if (index > size - 2) 
     { 
     ++size; 
     buffer = reallocateMsg(buffer,size,"readToken"); 
     } 
    buffer[index] = ch; 
    ++index; 
    ch = fgetc(fp); 
    } 

/* push back the character that got us out of this loop */ 

ungetc(ch,fp); 
buffer[index] = '\0'; 

return buffer; 
} 
+0

好,你沒有顯示'readToken',但大概是返回'NULL'。如果你想問一個關於它的問題,你需要顯示'readToken'的代碼和你正在閱讀的文件的內容。 – Useless 2014-09-25 18:48:50

+0

哦,你是對的。我什至沒有想到,因爲它在我的程序中的其他地方很好地返回字符串,但我會檢查出來。它的功能基本上與fscanf()相同。 – Max 2014-09-25 18:50:56

+0

請花些時間學習如何使用調試器,逐行檢查代碼,檢查變量等,這將爲您節省大量時間。 SO不是替代品。 – OldProgrammer 2014-09-25 18:55:49

回答

0

您可能希望你的第二個前添加

rewind(fp); //you need to reset the file pointer to the beginning. 

while循環:

 do 
    { 
     if (i<count) 
     { 
     //Problem here 
     printed=0; 
     i+=1; 
     str1 = readToken(fp); 
     printf("%s ",str1); //THIS IS WHERE THE NULL GETS PRINTED!! 
     //free(str1); 
     } 
     else 
     { 
     printed=1; 
     printf("file has been printed\n"); 
     printf("value of count here is:%d\n",count); 
     printf("value of i here is:%d\n",i); 
     } 
    } 
    while(counted==1&&printed==0);