函数输出问题

时间:2018-06-28 02:21:28

标签: c++ cout c-strings

我做了一个函数,将一个整数数组(一个邮政编码)转换为一个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
}

1 个答案:

答案 0 :(得分:0)

当您cout返回函数内部的返回变量时,应该期望它返回所需的值。这是因为当您在函数内部创建局部变量时,它位于该函数的堆栈框架中。因此,当在函数内STILL时,作用域仍设置为查看该变量。

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

为了返回在堆栈框架之内或之外的常量,您将需要通过引用传递该变量,这通常是通过尝试复制对象的副本,然后返回该副本来完成的。