VS2022 fprintf函数始终无法正常运行

img

img


如图,试了各种方法,始终绕不开这个错误,已经尝试了修改%d等方法
但在后面我发现

img


尝试改成了printf_s 结果也是无效的,为什么这里会出问题呢?

报错的似乎是scanf_s,因为那个报错跳转到的函数是__stdio_common_vfscanf,可能是Name缓冲区大小太小了?你把它的大小改大一点试试。

试试printf_s

你的fprintf()里面有4个%d,但是只有三个0

解决方法
方法一:

hold scanf_s("%s",name); 

改成

scanf_s("%s", name,40);

方法二:

hold scanf_s("%s",name); 改为 scanf("%s",name);

并在文件的第一行添加以下代码:(必须在第一行)

#define _CRT_SECURE_NO_WARNINGS 1

**其他原因**
fprintf函数的格式错误

%s格式说明符需要一个以 null 结尾的数组,char而不是std::string。因此fprintf' 的行为是未定义的。

采用:

fprintf(f, "|%-12s |%-5c |%-9d |", name.c_str(), area, ch);

因为c_str()函数返回以 null 结尾的数组。

此外,其他类型的格式字符串似乎也不正确。要打印int, 格式说明符是%d, not %c, 为 char 指定的格式是%c, not %d。

因此,最终的调用fprintf应该是:

fprintf(f, "|%-12s |%-5d |%-9c |", name.c_str(), area, ch);

```

具体讨论可参考:


https://stackoverflow.com/questions/65710730/fprintf-is-not-working-properly-in-visual-studio-c-programming

格式化控制字符有5个,参数只有4个,应该是这个原因吧。