从指针打印动态int数组获得奇怪的字符

时间:2017-04-17 20:26:46

标签: c++ arrays pointers

就像标题所说的那样,我一直试图打印动态分配的数组元素,这些元素被分配给指针。从那里开始,我试图在添加一些元素后打印出阵列的元素,但是我得到了非常奇怪的字符,甚至不是整数。这是一些代码。

//QS.h
class QS: public QSInterface { //where the pointer is declared 
private:
int* quickSort;

//QS.cpp

bool QS::createArray(int capacity) {  //where the array is created
if (quickSort != NULL) {
    //delete [] quickSort;
}
quickSort = new int[capacity];
arrayCap = capacity;
arraySize = 0;
return true;
}

bool QS::addToArray(int value) { //elements are added
if (arraySize >= arrayCap) {
    return false;
}
quickSort = &value;
++arraySize;
return true;

}

string QS::getArray() const {  //where array is "printed"
string array;
for (unsigned int i = 0; i < arraySize; ++i) {
    array += *quickSort + i;
    array += ", ";
}
return array;
}

我收到的输出只是无意义的ASCII字符,而不是内存地址。我想在添加到阵列时我可能搞砸了。有帮助吗?感谢

注意*我&#34;有&#34;使用数组,但也许在其他一些世界中,矢量会更好

3 个答案:

答案 0 :(得分:1)

您不能只将int添加到std::string(我认为无论如何都是相关的string)。如果查看supported operations,您会发现只能添加字符串,单个字符,C样式字符串,{'a', 'b', 'c'}等字符列表,或者(从下一版C ++开始){{ 1}}秒。您的string_view正在被转换为其中之一,或者您的代码甚至无法编译。我不记得是否会将int转换为int s或指向指针,但这两种情况都不是预期的行为。

要按照您希望的方式将char转换为字符串,一些可能的选项是to_string,各种C函数或string streams

此外,int读为*quickSort + i,而不是(*quickSort) + i,因此您不断将*(quicksort + i)添加到i的第一个元素。要访问元素quickSort,首选方法通常是数组索引i

答案 1 :(得分:1)

执行此行时(添加功能):

quickSort = &value;

您基本上将指针 quickSort 设置为指向参数的内存地址,并停止指向您在其中创建的动态数组的第一个元素开始。因此,您会错过所有其他元素,并打印随机存储器数据的整数解释。

改为写作:

quickSort[size] = value;

会将参数的值添加到为您的数组分配的内存地址,如您所愿,而不移动指针 quickSort

最后,在最后一个函数中:

array += *quickSort + i;

可以更恰当地替换为:

array += quickSort[i];

并且,只是为了确保从 int string 的转换正确完成

array += to_string(quickSort[i]);

答案 2 :(得分:0)

'QS :: addToArray'将quickSort设置为指向堆栈上的新值(参数)。它不会向已分配的数组添加任何内容。

分配数组并将指针存储在quickSort后,不应以任何方式更改它。您应该将项目存储在quickSort指向的内存中,如下所示:

bool QS::addToArray(int value) { //elements are added
    if (arraySize >= arrayCap) {
        return false;
    }
    quickSort[arraySize++] = value;
    return true;

}

编辑:我后来注意到QS :: getArray()中*quickSort + i的问题,但我不会在这里添加它,因为Daniel H.首先写了这篇文章。