首页 > 解决方案 > 函数输出问题

问题描述

我做了一个函数来将一个整数数组(一个邮政编码)转换为一个 cstring。如果我调用该函数,则返回是乱码,但是如果我在函数内计算返回的变量,则完全符合预期。

const char* print_zip(const int* zip) {
    char output[6];
    char* ctemp = output;
    const int *itemp = zip;
    for (int i = 0; i < 5; i++) {
        *ctemp = *itemp + 48;       // convert to char numbers.
        itemp++;                    // iterate using pointers rather than []
        ctemp++;                    // per assignment specifications
    }
    *ctemp = '\0';
    std::cout << output << std::endl;   // (debug only) as expected
    return output;                  // cout << print_zip(); not as expected
}

标签: c++coutc-strings

解决方案


当您cout在函数内部返回变量时,应该期望它返回所需的值。这是因为当您在函数内创建局部变量时,它驻留在该函数的堆栈帧中。因此,当 STILL 在函数内部时,范围仍然设置为查看该变量。

相反,当返回指向局部变量的指针时,堆栈帧不再存在,基本上意味着指向的对象可能或不可能是完全垃圾。

为了返回一个在堆栈帧内或堆栈外保持不变的变量,您需要通过引用传递它,这通常是通过制作您尝试返回的对象的副本,然后返回该副本来完成的。


推荐阅读