使用fscanf检查字符串大小?

时间:2013-03-25 18:05:03

标签: c

我正在尝试编写安全的文件输入。我有一个固定的缓冲区大小128.我想从文件中读取字符串,但在复制它们之前,我想检查它们的长度是否小于或等于128

我可以这样做:

fscanf(fp, "%128s", myString)

我已经看到以相同方式使用的scanf会限制读入的字符数,但是没有看到对fscanf和字符串使用过的任何引用?

3 个答案:

答案 0 :(得分:3)

是的,你可以这样做,但你已经离开了1。 因此,如果您有一个长度为128个字符的数组:

char myString[128] = {'\0'};
fscanf(fp, %127s", myString);

您提到您已经看到scanf()中使用的语法,这与以下内容相同:

fscanf(stdin, "%127s", myString); // just like scanf("%127s", myString);

请注意man page有关scanf()fscanf()的格式字符串的相同信息

答案 1 :(得分:2)

如果您使用的是Windows平台,我认为您可以使用fscanf_s,否则我认为最好使用fgets和/或sscanf:)< / p>

答案 2 :(得分:2)

您可以使用char * fgets ( char * str, int num, FILE * stream );来避免缓冲区溢出

喜欢:

fgets(myString, 127, fp);