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;
}
好,你沒有顯示'readToken',但大概是返回'NULL'。如果你想問一個關於它的問題,你需要顯示'readToken'的代碼和你正在閱讀的文件的內容。 – Useless 2014-09-25 18:48:50
哦,你是對的。我什至沒有想到,因爲它在我的程序中的其他地方很好地返回字符串,但我會檢查出來。它的功能基本上與fscanf()相同。 – Max 2014-09-25 18:50:56
請花些時間學習如何使用調試器,逐行檢查代碼,檢查變量等,這將爲您節省大量時間。 SO不是替代品。 – OldProgrammer 2014-09-25 18:55:49