char *fractToBin(unsigned long long num)
{
char bin[100];
for(int i=0; i<23; i++)
bin[i] = '0';
bin[23] = '\0';
char *temp = new char[100];
int count = 0;
int i;
int it = num;
while(num != 0)
{
count++;
num /= 10;
}
int base = pow(10, count);
for(i = 0; i<23; i++)
{
it = it * 2;
if(it > base)
{
it = it - base;
bin[i] = '1';
}
else if(it < base)
bin[i] = '0';
else if (it == base)
{
bin[i] = '1';
break;
}
}
temp = bin;
return temp;
}
int main()
{
char *s;
s = fractToBin(625);
cout << endl; //if this is here then it prints out wrong value
cout << s << endl;
return 0;
}
fracToBin 函数将 float 的小数部分转换为二进制。将 0.625 更改为其整数以进行转换。如果前面没有打印 endl,则二进制文件会正确输出。
我一直试图找出问题所在,但找不到任何东西。任何帮助将不胜感激。
最佳答案
您正在返回一个指向局部变量的指针。它有时起作用的事实是未定义行为的一部分。
temp = bin;
只是将指针分配给 bin
的地址并泄漏您分配的内存,因为您不再有指向它的指针来删除它.
要么使用 strcpy
将数据从 bin
复制到 temp
,要么直接使用 temp
而不是 bin
.
关于c++ - 当字符串从函数返回时,如果在它之前有和结束行,它会错误地打印输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23026982/