c++ - 当字符串从函数返回时,如果在它之前有和结束行,它会错误地打印输出

标签 c++ arrays char

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/

相关文章:

代理类的 C++ 优势

c++ - 使用 operator[] 插入时不同的 std::map 大小(vc++ vs g++)

javascript - 转换分隔字符串和对象数组

c++ - 如何将 char 数组插入另一个 char 数组?

c++ - Qt,关于UDPlink的线程安全

c++ - boost::assign 不适用于 += 的集合

java - 将字节数组转换为字符串显示垃圾

c - 在 if 条件下改变字符串变量

c++ - 我的字符计数代码是字符计数错误。为什么?

c - 为什么我的 char 数组的第一个值是 10?