首页 > 解决方案 > 返回字符串指针在C中得到错误的字符串

问题描述

我正在尝试将十进制转换为二进制。我正在研究函数“const char * dtb_16(float a)”。在这个函数中,我将字符串的指针作为下面的代码返回。

代码段

或者

const char* dtb_16(float a) {
    char str[17];
    int i = 0;;
    for (i = 0; i < 16; i++) {
        a = a * 2;
        if (a > 1) {
            a = a - 1;
            str[i] = '1';
        }
        else
            str[i] = '0';
    }
    str[16] = 0;
    printf("%s \n", str);;
    return str;
}

并在主要

printf("test : %s\n", dtb_16(decimal));

结果是这样的:

starting read files
Please enter binary bit length: 16
0011101011100001
test : 烫烫眺?
1011110101110000
test : 烫烫眺?
1110001111010111
test : 烫烫眺?
1101110000101000
test : 烫烫眺?
1001100110011001

该字符串在函数中看起来不错,dtb_16 但返回主函数时出错。我试过 return*str&str,它们都不起作用。

标签: cstringpointersreturn

解决方案


您不应该返回局部变量的地址,而是必须str在堆上创建变量。你可以通过交换char str[17];来做到这一点char* str = malloc(sizeof(char) * 17);


推荐阅读