指向数组的指针,然后获取完整的数组c++

pointer to array and then getting full array c++

本文关键字:数组 c++ 获取 指针 然后      更新时间:2023-10-16

编辑(重制版):以下是我要做的:

char* someArray = new char[someIntVariable];

然后在数组上循环并使用自定义函数来获取另一个数组的内容(这就是问题所在):

char* temp = someFunc(someArray, someIntVariable); //someFunc is a char* returning function
for(int i = 0; i < someIntVariable; i++){
    someArray[i] = temp[i] //temp[i] is where the problem lies. It returns something like: /213
}

文本版本:我试图获得一个指向char数组的指针,以返回所有数组内容(只使用一个指针),并在之前创建的数组上循环,填充它的空格,或者以某种方式为它分配一个赋值。

希望这是可以理解的。

"someFunc":

char* convertCharArr(char* _inputArr, int arrSize){
    char *inputArr = new char[arrSize];
    std::memmove(inputArr, _inputArr, sizeof(*inputArr));
    static char *resizedUsrInptAns = new char[arrSize];
    for(int i = 0; i < sizeof(inputArr)/sizeof(inputArr[0]); i++){
        if(i == arrSize + 1){
            break;
        }
        resizedUsrInptAns[i] = inputArr[i];
    }
    return resizedUsrInptAns;
}

ptr2ptr1是等价的,所以我将忽略ptr2来获得答案。

如果你想克隆一个未知大小的char数组,你必须使用动态内存分配:

char * p = malloc(strlen(ptr1) + 1);
strcpy(p, ptr1);
// ...
free(p);

不能将指针分配给数组,这在c中是不可能的。只能相反,将数组分配给指针。

您必须创建一个新的数组(具有动态分配),并将数据复制到该数组中。

示例

char* pChar = GetArrayPointer();
char* pNewArrayPointer = (char*)malloc(strlen(pChar) + 1);
strcpy(pNewArrayPointer, pChar);

编辑

1) 您不必复制_inputArr,因为您不需要在converCharArr()中向其写入数据。

2) 为什么要使用sizeof(inputArr)/sizeof(inputArr[0]),它不起作用,因为inputArr是一个指针(指针和数组之间有一些区别:))。您应该使用arrSize

数组和指针的差异:http://www.geeksforgeeks.org/g-fact-5/

在您的示例中,prt1和ptr2都指向同一个字符。使用cout可以获得与arr1相同的ptr1/ptr2效果。

所以,下面所有的都会打印相同的东西:-

cout << arr1;
cout << ptr1;
cout << ptr2;

如果您想使用ptr2创建与arr1内容相同的新数组,那么

ptr2 = malloc(strlen(ptr1) + 1);
strcpy(ptr2, ptr1);

这可能会有所帮助
链接:http://ideone.com/Nwqd22

#include <iostream>
using namespace std;
char* fun(){
    char * returnValue = "String";
    return returnValue;
}
int main() {
    char * firstVariable;
    firstVariable = fun();
    cout << firstVariable;
    return 0;
}