【发布时间】:2022-01-15 01:06:04
【问题描述】:
我正在尝试使用 scanf() 在 C++ 文件中输入字符串(编译器警告我将 scanf() 更改为 scanf_s(),所以我更改了它)。
char string[3];
scanf_s("%s", string);
printf("%s", string);
我在控制台中输入“abc”并按回车键。那么程序会抛出下面的异常
在 0x00007FF9C35B2079 (ucrtbased.dll) 处引发异常 Project1.exe: 0xC0000005: 访问冲突写入位置 0x0000008DD5D00000.
我无法找出错误。
【问题讨论】:
-
scanf_s要求字符串缓冲区的大小为第三个参数。同样重要的是,C 字符串需要以 NUL 结尾。三个字母的单词需要四个字节来存储。 -
您是否收到任何编译器警告?您应该将它们视为错误。
-
不要同时标记 C 和 C++,除非询问两种语言之间的差异或交互。