我是C的新手,学习如何读取和写入作业的文件。有人可以向我解释为什么下面的函数有时会正确读取文件,有时它会发出乱码?我相信它与fileName有关。但是,我打印出文件名并保留了正确的字符串,所以我不知道为什么它有时会起作用,有时则不知道(大部分时间它都不起作用)。
更新:正确测试文件是否打开并从头开始构建路径名以确保传递字符串文字的代码。输出有时是正确的,有时是无意义的
void playGame(struct Room *HoldRooms[], char dirName[], char fileName[], int
roomStart)
{
//file and path name
char filePathName[100];
char tempString[100];
char string[MAX_STRING_LENGTH];
char field1[MAX_STRING_LENGTH];
char field2[MAX_STRING_LENGTH];
char field3[MAX_STRING_LENGTH];
filePathName[0] = 0;
char c;
strcpy(filePathName, dirName);
strcat(filePathName, "/");
strcat(filePathName, "room");
sprintf(tempString, "%d",roomStart);
strcat(filePathName,tempString);
//All lines contain three fields we will only need the third
FILE *fp = fopen(filePathName, "r");
chmod(filePathName, S_IRUSR | S_IRGRP | S_IROTH);
printf("The file is %s \n", filePathName);
if (fp == NULL) //If the file does not open
{
//fprintf(stderr, "Could not open %s\n", fileName);
//perror("in main");
printf("Could not open file\n" );
exit(1);
}
else
{
printf("Opened file %s \n", filePathName);
//fprintf(fp, "BLAH BLAH BLAH!");
fscanf(fp, "%s %s %s", field1, field2, field3);
printf("1: %s 2: %s 3: %s", field1, field2, field3);
}
fclose(fp); //close the file
}
答案 0 :(得分:0)
此测试
if (fp < 0) //If the file does not open
不是测试文件是否已打开的正确方法。如果fopen
无法打开文件,则会返回NULL
,这是您必须检查的内容。
if (fp == NULL) //If the file does not open
您拥有它的方式,NULL
值将通过您的支票,而#34;否定&#34;文件指针可能有效,但检查失败。虽然您提到了一个特定的文件内容,但您还提到了&#34;文件&#34;我怀疑你的意思是说一些文件名有效,有些则不然:而不是一个文件有时会产生乱码。