为什么回报会改变我的价值?

时间:2018-02-18 07:07:58

标签: c++ loops return

我正在编写一个应该返回Hello world!的函数,但它会返回Hello Wo ..我在return语句之前添加了一个cout来检查值并且它是正确的。

我将两个参数传递给函数,一个和两个,我的函数结合了单词并返回。我编写了一个循环来将一个转换为一个新的char,因此我访问它的数组时原始传递的值没有受到影响。

功能:

char* myStrCat(char inputOne[], char inputTwo[]){
    int sizeOne = myStrLen(inputOne);
    int sizeTwo = myStrLen(inputTwo);
    char functionTemp[100];

    for(int tempReplace = 0; tempReplace < sizeOne; tempReplace++){
        functionTemp[tempReplace] = inputOne[tempReplace];
    }

    for(int i = 0; i < sizeTwo; i++){
        functionTemp[i + sizeOne] = inputTwo[i];
    } 
    cout << "check: " << functionTemp << endl;
    return functionTemp;
}

1 个答案:

答案 0 :(得分:4)

functionTemp是一个局部变量,myStrCat() 返回局部变量的地址,读取编译器警告

不是将functionTemp作为本地静态数组,而是将functionTemp作为pointer,并使用newpointer动态分配内存并返回指针。< / p>

修改:

char* myStrCat(char inputOne[], char inputTwo[]){
        int sizeOne = strlen(inputOne);
        int sizeTwo = strlen(inputTwo);
        int bytes = sizeOne + sizeTwo;
        char *functionTemp = new char [bytes + 1];/* allocating memory dynamically for functionTemp */


            for(int tempReplace = 0; tempReplace < sizeOne; tempReplace++){
                    functionTemp[tempReplace] = inputOne[tempReplace];
            }

            for(int i = 0; i < sizeTwo; i++){
                    functionTemp[i + sizeOne] = inputTwo[i];
            }
            cout << "check: " << functionTemp << endl;
            return functionTemp;
    }

在获得串联字符串/动态地址后调用函数时,使用delete释放它以避免内存泄漏。一个简单的调用函数看起来像

int main() {
        char *temp = NULL;
        temp = myStrCat("Stack","overflow");/* temp holds dynamic address */
        cout<<temp<<endl;
        /* free the dynamically allocated memory */
        delete [] temp ;

        return 0;
}