gpt4 book ai didi

c++ - 用零填充字符串后 - 它打印未指定的字符? (C++)

转载 作者:行者123 更新时间:2023-11-28 02:25:05 24 4
gpt4 key购买 nike

基本上,在这里,我试图反转一个数组,并将反转后的 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 迁移过来)还是比较陌生,我已经盯着它看了好几个小时,但还没有想出任何想法.

最佳答案

std::string constructor您正在使用的是假设您传递的字符串已正确终止,但事实并非如此,这会导致未定义的行为,因为 std::string 构造函数超出了结尾digitsChar 数组。

三种可能的解决方案:

  1. digitsChar 数组中的另一个字符腾出空间并终止它:

    char digitsChar[size + 1];

    for (...) { ... }

    digitsChar[3] = '\0';

    string intString(digitsChar);
  2. 使用另一个构造函数来传递字符数组的长度:

    string intString(digitsChar, length);
  3. 将字符直接追加到字符串中:

    string intString;

    for (int i = 0; i < length; i++) {
    intString += '0' + digits[i];
    }

当然还有其他解决方案,例如使用 std::ostringstream .

关于c++ - 用零填充字符串后 - 它打印未指定的字符? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31026770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com