Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么字符数组周围的堆栈已损坏 我对C++非常陌生,来自java。我正在从字符数组中提取第一个单词,所以我认为创建一个新数组来保存所有第一个单词的字符,并将它们传输到循环运行到句子中的一个空格中是可行的。代码如下: void execute(){ //start with getting the first word char first_word[20]; int i = 0; while (input[i] != ' '){ // input is a char array declared and modified with cin, obtaining the command. first_word[i] = input[i]; i++; } print(first_word + ' ' + 'h' + ' ' + 'h' + 'a'); }_C++_Arrays_Char_Stack - Fatal编程技术网

为什么字符数组周围的堆栈已损坏 我对C++非常陌生,来自java。我正在从字符数组中提取第一个单词,所以我认为创建一个新数组来保存所有第一个单词的字符,并将它们传输到循环运行到句子中的一个空格中是可行的。代码如下: void execute(){ //start with getting the first word char first_word[20]; int i = 0; while (input[i] != ' '){ // input is a char array declared and modified with cin, obtaining the command. first_word[i] = input[i]; i++; } print(first_word + ' ' + 'h' + ' ' + 'h' + 'a'); }

为什么字符数组周围的堆栈已损坏 我对C++非常陌生,来自java。我正在从字符数组中提取第一个单词,所以我认为创建一个新数组来保存所有第一个单词的字符,并将它们传输到循环运行到句子中的一个空格中是可行的。代码如下: void execute(){ //start with getting the first word char first_word[20]; int i = 0; while (input[i] != ' '){ // input is a char array declared and modified with cin, obtaining the command. first_word[i] = input[i]; i++; } print(first_word + ' ' + 'h' + ' ' + 'h' + 'a'); },c++,arrays,char,stack,C++,Arrays,Char,Stack,当尝试执行此操作时,我发现变量“first_word”周围的错误堆栈已损坏。为什么会发生这种情况?cin>>当输入是字符数组时,输入不会像您认为的那样执行。>>运算符无法读入字符数组,您必须使用cin.getline或cin.read。因此,通过处理无效内存,实际上是在造成未定义的行为 即使它确实有效,您也没有进行任何边界检查。如果输入在遇到空格字符或更糟的字符之前有超过20个字符,并且根本不包含空格字符,则将第一个_字的末尾写入周围的内存 如果您真的想用C++编写代码,不要使用字符数组来处理字

当尝试执行此操作时,我发现变量“first_word”周围的错误堆栈已损坏。为什么会发生这种情况?

cin>>当输入是字符数组时,输入不会像您认为的那样执行。>>运算符无法读入字符数组,您必须使用cin.getline或cin.read。因此,通过处理无效内存,实际上是在造成未定义的行为

即使它确实有效,您也没有进行任何边界检查。如果输入在遇到空格字符或更糟的字符之前有超过20个字符,并且根本不包含空格字符,则将第一个_字的末尾写入周围的内存

如果您真的想用C++编写代码,不要使用字符数组来处理字符串。这就是C处理字符串的方式。相反,C++使用了许多方法和方法。而且std::cin知道如何使用std::string进行操作

例如:

#include <string>

void execute()
{
    //start with getting the first word
    std::string first_word;
    std::string::size_type i = input.find(' '); // input is a std::string read with cin, obtaining the command.
    if (i != std::string::npos)
        first_word = input.substr(0, i);
    else
        first_word = input;
    std::cout << first_word << " h ha";
}

输入来自哪里?大概有20多个字符。我不明白你的打印功能在数组上不连接字符串。如果您想要像Java这样简单的字符串,那么应该使用std::string。first_word+''并不像您认为的那样。第一个单词是字符数组,而不是字符串。@NeilKirk输入来自另一个方法,该方法简单地接受“cin>>input”,然后将它们全部小写。我不知道这样做是否正确。std::string first_wordinput,std::findinput,input+input_size';打印第一个单词+h ha;cin>>输入无效如果输入是字符数组,那么它是有效的,但它并不像您认为的那样。将输入改为std::string,但是您必须重新写入execute以使用std::string。当“input”为测试输入时,我仍然会得到错误,并且那里甚至没有20个字符。那么为什么呢?cin>>输入并不像你想象的那样。cin>>无法读入字符数组,请改用cin.getline或cin.read。因此,您实际上是在处理无效内存并导致未定义的行为。此外,即使它正常工作,您也不会在复制到第一个单词的字符末尾添加空终止符。正如Matt所说,printf语句并没有像您认为的那样执行,但这不会导致堆栈损坏,只是垃圾输出。而且