【问题标题】:generating *char buffer生成 *char 缓冲区
【发布时间】:2012-10-03 21:32:53
【问题描述】:

我需要创建一个包含 300 个符号的缓冲区并将其传递给下面描述的函数:

void printThis(char *info);

生成此缓冲区的最佳方法是什么?

如果这很好:

char *buffer = new char()

那么,如何向这个缓冲区添加字符呢?以下方法不好,会引发访问冲突:

for (int i=0; i<300;i++)
{
   sprintf(s,"%s",'a');
}

【问题讨论】:

  • 因为%s 需要char *,而'a' 是一个字符。另外,如果你这样做,你真的应该用 s + i 替换 s - sprintf() 无法知道它在哪里完成打印 - 它不是从终止的 nul 开始的 strcat()...跨度>

标签: c++ visual-c++


【解决方案1】:
std::vector<char> buffer(300, 'a');

// I'm guessing that printThis wants a zero-terminated string
buffer.push_back(0);

printThis(&buffer[0]);

如果您使用的是 C++11 库,那么 buffer.data() 可能看起来比 &amp;buffer[0] 更好。

如果你真的想自己管理内存(提示:你不想),要么创建一个自动数组:

char buffer[300];

或动态数组:

char * buffer = new char[300];

// Don't forget to delete it, and hope than nothing threw an exception
delete [] buffer;

【讨论】:

  • std::unique_ptr&lt;char[]&gt; buffer(new char[300]); 而不是newdelete
【解决方案2】:

如果这很好:

不是。真的,真的,不是。它甚至不是缓冲区。这也不是一个好主意。

std::string s;
for(int i = 0; i < 300; i++)
    s.push_back('a'); // good job all round
std::cout << s; // 300*a. Why? Who knows?
printThis(s.c_str());

【讨论】:

  • 在这种情况下,std::string s(300, 'a');
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-27
  • 2021-01-04
  • 1970-01-01
  • 2010-09-25
  • 1970-01-01
  • 2013-10-25
  • 1970-01-01
相关资源
最近更新 更多