发生此错误的原始代码是我在一个在线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;
}
1条答案
按热度按时间aamkag611#
转换函数转换原始字符数组中的所有条目,这些数据是“未初始化的”,可以是任何字符值,包括通常不可显示的字符值。
我对这段代码有很多疑问(缩进,未初始化的值
CleanChar
,并且根本不使用转换函数),但是如果你坚持使用“convertToString”函数,你需要修改它,这样它就不会使用字符数组中可能没有用完的所有条目,相反,这会稍微好一点,尽管我根本不会使用它,基本上,当你点击字符数组/ cstring中的空字符时,你需要停止。