函数输出问题

Function Output Problems

我创建了一个函数来将一个整数数组(一个邮政编码)转换为一个 cstring。如果我调用该函数,return 是乱码,但如果我在函数中计算出 returned 变量,它就完全符合预期。

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 = '[=10=]';
    std::cout << output << std::endl;   // (debug only) as expected
    return output;                  // cout << print_zip(); not as expected
}

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

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

为了 return 一个在栈帧内外保持不变的变量,您需要通过引用传递它,这通常是通过复制您试图 return,然后 return 复制该副本。