尝试读取和写入字符串时访问冲突?

时间:2015-05-28 01:54:59

标签: c++ iostream

我对c ++很新。我来自java的土地,所以输入/输出系统让我有点困惑,很抱歉,如果这是一个愚蠢的问题。

我正在尝试声明一个字符串,保存一些控制台输入,然后打印字符串。

int _tmain(int argc, _TCHAR* argv[])
{

    char* pizza = "";
    std::cin >> pizza;
    std::cout << pizza;


    return 0;
}

我遇到访问冲突异常,这让我觉得我的内存地址无效。

2 个答案:

答案 0 :(得分:5)

我会解释你的代码有什么问题,但首先是正确的代码。

app = angular.module('app')

它使用标准库字符串类,而不是#include <string> #include <iostream> int main() { std::string pizza; std::cin >> pizza; std::cout << pizza; return 0; } 。现在转到你的代码。

char*

这是错误的。它以较旧的标准编译,但即便如此仍然是一个坏主意。字符串文字,如char* pizza = ""; ,是const字符的数组。使用上面的行,您将为此const char数组分配一个非const指针。在涉及数组和指针的所有其他上下文中,这应该是非法的。由于历史原因,允许(直到C ++ 11)字符串文字,但你仍然不应该这样做。因为即使你有一个非const指针,写入它指向的位置仍然是非法的,这就是你尝试这样做时获得访问冲突的原因:

""

答案 1 :(得分:1)

您需要为数组提供一些空间。像:

char pizza[50];

这可以工作,但是这段代码可能是在写入数组的边界(对于C ++标准,这只是未定义的行为)。正如其他海报所指出的那样,使用std::string会更明智,更容易使用。

您可以查看this教程,了解基本C ++输入/输出的快速介绍。