2012-09-07 109 views
0

我需要创建一个包含300个符号的缓冲区,并把它传递给下面描述的功能:生成*字符缓冲区

void printThis(char *info); 

什么是产生此缓冲区的最佳方式?

如果这是件好事:

char *buffer = new char() 

那么,如何字符到这个缓冲?下面的方法是不好的,它提出了一个访问冲突:

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

因为'%s'需要'char *',''a''是一个字符。另外,如果你这样做,你应该用's + i'替换's' - 'sprintf()'无法知道它在哪里完成了打印 - 它不是从终止开始的'strcat()' nul ... – 2012-09-07 15:03:38

回答

4
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()看起来可能&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; 
+0

或'std :: unique_ptr buffer(new char [300]);'而不是'new'和'delete'。 – Fanael

0

如果这是好的:

它不是。它确实不是。它甚至不是缓冲区。这也不是一个好主意。

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()); 
+1

在这种情况下,'std :: string s(300,'a');' – Fanael