基本上,在这里,我试图反转数组,并将反转的int数组转换为字符串(我试图在C ++中编写相当于Java的BigInteger类 - 基本上将输入转换为大端排序,分解操作,将结果反转回小端格式,并返回字符串)。
正如你在下面看到的那样,它会输出一些奇怪的字符(我认为这是一个超出范围的参考?) - 但我不完全确定是什么导致了这个输出?
如果你能看一下,我真的很感激:
示例输入
int a[] = {1, 2, 3};
int rA[3];
reverseIntArray(a, rA, 3);
string aString = intArrayToString(a, 3);
cout << aString << endl;
控制台输出
123\216\377
如您所见 - 它正确计算答案,但\277_\377
除外。
我将发布其余的相关功能:
reverseIntArray
void reverseIntArray(int array[], int reversedArray[], int arrayLength) {
for (int i = 0; i < arrayLength; i++) {
reversedArray[i] = array[arrayLength - 1 - i];
}
}
intArrayToString
string intArrayToString(int digits[], int length) {
// convert int array to char array
char digitsChar[length];
for (int i = 0; i < length; i++) {
digitsChar[i] = '0' + digits[i];
}
// convert char array to string
string intString(digitsChar);
return intString;
}
我很确定这是一个与指针有关的微妙问题,但我仍然相对较新的C ++(从Java迁移)并且我已经盯着这几个小时但是避风港&# 39;想出任何想法。
答案 0 :(得分:2)
您正在使用的std::string
constructor假设您传递的字符串已正确终止,而不是std::string
构造函数导致未定义的行为超出digitsChar
数组的末尾。
三种可能的解决方案:
为digitsChar
数组中的另一个字符腾出空间并终止它:
char digitsChar[size + 1];
for (...) { ... }
digitsChar[3] = '\0';
string intString(digitsChar);
使用另一个传递字符数组长度的构造函数:
string intString(digitsChar, length);
将字符直接附加到字符串:
string intString;
for (int i = 0; i < length; i++) {
intString += '0' + digits[i];
}
当然还有其他解决方案,例如使用std::ostringstream
。