返回的字符串指针在 C 中得到了错误的字符串
Returning string pointer got wrong string in C
我正在尝试将十进制转换为二进制。我正在研究函数“const char * dtb_16(float a)”。
在这个函数中,我return将字符串的指针作为下面的代码。
或
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
但是当回到 main 时就出错了。
我尝试了 return *str
和 &str
,其中 none 有效。
您不应该 return 局部变量的地址,相反您必须在堆上创建 str
变量。您可以通过将 char str[17];
交换为 char* str = malloc(sizeof(char) * 17);
来做到这一点
我正在尝试将十进制转换为二进制。我正在研究函数“const char * dtb_16(float a)”。 在这个函数中,我return将字符串的指针作为下面的代码。
或
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
但是当回到 main 时就出错了。
我尝试了 return *str
和 &str
,其中 none 有效。
您不应该 return 局部变量的地址,相反您必须在堆上创建 str
变量。您可以通过将 char str[17];
交换为 char* str = malloc(sizeof(char) * 17);