fgets与fscanf获取字符串警示
参考网站
fgets函数
char* fgets(char* str, int num, FILE* stream );
从文件中获取一行字符串,获取的字符串的最大长度为num-1
(这一行有超过num-1个字符也只会读num-1个字符),并且在字符串的结尾还会添加一个'\0'
终止符。因此,num
最大取传入的参数str
的数组长度。
如果获取的是空行或者读到了文件尾,返回空指针;否则返回str
示例:
/* fgets example */
#include <stdio.h>
int main()
{
FILE * pFile;
char mystring [100];
pFile = fopen ("myfile.txt" , "r");
if (pFile == NULL) perror ("Error opening file");
else {
if ( fgets (mystring , 100 , pFile) != NULL )
puts (mystring);
fclose (pFile);
}
return 0;
}
fscanf函数
int fscanf ( FILE * stream, const char * format, ... );
参数stream
是格式字符串如"%s %d"
。特别对于"%s %s"
的情况,每个扫描到的字符串都会在末尾添加一个'\0'
终止符。因此,如果用数字指定扫描的字符串长度,一定不能超过定义的字符数组长度-1,否则就会造成越界错误。下面的示例说明了这一点:
/* fscanf example */
#include <stdio.h>
int main ()
{
char str[80];
float f;
FILE * pFile;
pFile = fopen ("myfile.txt","w+");
fprintf (pFile, "%f %s", 3.1416, "PI");
rewind (pFile);
fscanf (pFile, "%f", &f);
fscanf (pFile, "%79s", str);// 字符串长度不能超过字符数组的大小-1
fclose (pFile);
printf ("I have read: %f and %s \n",f,str);
return 0;
}