报错的似乎是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);
```
格式化控制字符有5个,参数只有4个,应该是这个原因吧。