c++ 我用字符数组代替字符串来输入句子,但是当字符数组的大小超过400时,它就完全出错了,

tvz2xvvm  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(135)

发生此错误的原始代码是我在一个在线C++编译器中创建的工具,但我已经简化了代码,使其更易于理解
这段代码应该做的是,你输入一个整数来表示你想要连接的句子的数量,然后你输入每一个句子,当你输入你指定的句子数量时,你就得到了一个字符串中的所有句子,并且程序结束时的退出代码是0,但是当你增加stringInput数组的大小时(通过将InputSize定义更改为类似于600的值),最后得到的结果是一堆错误的字符和符号,它们与您输入的内容无关:

#include <iostream>
#include <bits/stdc++.h>
#include <string>
using namespace std;

string convertToString(char* a, int size) //character array to string function
{
    int i;
    string s = "";
    for (i = 0; i < size; i++) {
        s = s + a[i];
    }
    return s;
}
#define InputSize 300 // This is the value that bugs out whenever its larger than 400 sometimes when its on 350 it randomly works or bugs out

int main()
{
    int AmountOfStrings = 1;
    char StringInput[InputSize];
    char CleanChar;
    
    string FinalString = "";
    
    cout<<"amount of connected sentences:";
    
    cin>> AmountOfStrings;
    
    for (int i=-1; i < AmountOfStrings; i++){
    if (i != -1){
    cout<<"sentence n";
    cout<<i + 1;
    cout<<":\n";
    }
    cin.getline(StringInput,InputSize); // get the character array of what the user inputs
    
    FinalString = FinalString + convertToString(StringInput,InputSize); //convert the char array to string and connect the final string to the inputed sentence
    for(int i = 0;i < InputSize;i++){
        
        StringInput[i] = CleanChar; 
        
    }// this loop is to iterate trough all StringInput characters and set them to nothing 
    }
    cout<<FinalString;
    
    return 0;
}
aamkag61

aamkag611#

转换函数转换原始字符数组中的所有条目,这些数据是“未初始化的”,可以是任何字符值,包括通常不可显示的字符值。
我对这段代码有很多疑问(缩进,未初始化的值CleanChar,并且根本不使用转换函数),但是如果你坚持使用“convertToString”函数,你需要修改它,这样它就不会使用字符数组中可能没有用完的所有条目,相反,这会稍微好一点,尽管我根本不会使用它,基本上,当你点击字符数组/ cstring中的空字符时,你需要停止。

string convertToString(char* a, int size) //character array to string function
{
    int i;
    string s = "";
    for (i = 0; i < size && a[i] != '\0'; i++) {
        s = s + a[i];
    }
    return s;
}

相关问题