c - 返回字符串指针在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
,它们都不起作用。
解决方案
您不应该返回局部变量的地址,而是必须str
在堆上创建变量。你可以通过交换char str[17];
来做到这一点char* str = malloc(sizeof(char) * 17);
推荐阅读
- testing - 如何在空手道 DSL 中操作 xml 文件的变量?
- storage - Is there any script to cleanup files in /var/openebs?
- sharepoint - Office 365 Management Activity API - Audit.SharePoint returns event out of the time frame
- python - ORM中创建或调用类的区别
- r - 图的一侧显示第二组/类别的条形图
- oracle - JPA em.find(id) 适用于 Oracle 但不适用于 MariaDB
- microsoft-graph-api - Microsoft Graph Api 中的 List-Unsubscribe 标头不起作用
- powershell - 在 Powershell 中对路径列表进行排序
- tomcat - Apache Tomcat 服务器在注销时关闭
- python-3.x - 使用 aiohttp 创建非阻塞 RESTful 服务