试图读写字符串时发生访问冲突
Access violation when attempting to read and write a string?
我是c++新手。我来自java的土地,所以输入/输出系统让我有点困惑,所以很抱歉,如果这是一个愚蠢的问题。
我试图声明一个字符串,保存一些控制台输入到它,然后打印字符串。
int _tmain(int argc, _TCHAR* argv[])
{
char* pizza = "";
std::cin >> pizza;
std::cout << pizza;
return 0;
}
我得到一个访问冲突异常,这使我认为我在某个地方有一个无效的内存地址。
我会解释你的代码出了什么问题,但首先是正确的代码。
#include <string>
#include <iostream>
int main()
{
std::string pizza;
std::cin >> pizza;
std::cout << pizza;
return 0;
}
使用标准库string类,而不是char*
。现在开始编写代码。
char* pizza = "";
这是错误的。它按照旧的标准编译,但即使在当时,这仍然是一个坏主意。字符串字面值,如""
,是由const字符组成的数组。在上面这行代码中,将一个非const指针赋值给这个const字符数组。在涉及数组和指针的所有其他上下文中,这是非法的,因为它应该是非法的。由于历史原因,允许(直到c++ 11)使用字符串字面值,但您仍然不应该这样做。因为即使你有一个非const指针,写它所指向的位置仍然是非法的,这就是为什么当你尝试这样做时,你会得到一个访问冲突:
std::cin >> pizza;
您需要给数组一些空间。如:
char pizza[50];
这将是工作的,但是这段代码可能会写超过数组的边界(对于c++标准,这只是未定义的行为)。正如其他海报所指出的,使用std::string
将更明智,更容易使用。
您可以查看本教程快速介绍基本的c++输入/输出
相关文章:
- 写入位置0x0000000C时发生访问冲突
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 使用 ReadProcessMemory 获取字符串值的访问冲突
- C++ 0xCCCCCCCC将字符串转换为 int 写入访问冲突_Left
- 向 const 字符串参数发送 0 int 文本时的访问冲突
- 引发未经处理的异常:读取访问冲突。这>字符串被0x1C6F112
- C++字符串表达式求解器遇到访问冲突
- 反转字符串 c++ 时出现访问冲突错误
- 读取字符串的字符时出错-访问冲突错误C++
- 读取字符串字符时出错和访问冲突
- 字符串数据成员的指针错误 - 获取访问冲突
- 将BSTR字符串传递给_BSTR_t或CComBSTR构造函数时发生访问冲突
- 获取字符串后,CompStr(BSTR,BSTR)上发生访问冲突
- 修正:访问冲突读取位置(指针到字符串数组)
- 当将字符串和整数分开时,Sscanf_s访问冲突
- 错误访问冲突写入位置0x00229C20.尝试在控制台中输入字符串时
- 覆盖c字符串时发生访问冲突
- 使用atof将字符串转换为双精度时发生访问冲突
- 读取访问冲突-指向字符串矢量中值的字符串矢量指针
- 试图读写字符串时发生访问冲突