1

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

我可以做类似的事情:

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

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

4

3 回答 3

4

是的,你可以这样做,但你差了 1。所以如果你有一个长度为 128 个字符的数组:

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

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

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

请注意手册页scanf()如何具有与和的格式字符串有关的相同信息fscanf()

于 2013-03-25T18:11:08.140 回答
2

如果您在 Windows 平台上,我认为您可以使用fscanf_s,否则我认为最好使用fgets和/或sscanf:)

于 2013-03-25T18:08:20.377 回答
2

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

喜欢:

fgets(myString, 127, fp);
于 2013-03-25T18:08:34.740 回答