我需要創建一個包含300個符號的緩衝區,並把它傳遞給下面描述的功能:生成*字符緩衝區
void printThis(char *info);
什麼是產生此緩衝區的最佳方式?
如果這是件好事:
char *buffer = new char()
那麼,如何字符到這個緩衝?下面的方法是不好的,它提出了一個訪問衝突:
for (int i=0; i<300;i++)
{
sprintf(s,"%s",'a');
}
我需要創建一個包含300個符號的緩衝區,並把它傳遞給下面描述的功能:生成*字符緩衝區
void printThis(char *info);
什麼是產生此緩衝區的最佳方式?
如果這是件好事:
char *buffer = new char()
那麼,如何字符到這個緩衝?下面的方法是不好的,它提出了一個訪問衝突:
for (int i=0; i<300;i++)
{
sprintf(s,"%s",'a');
}
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;
或'std :: unique_ptr
如果這是好的:
它不是。它確實不是。它甚至不是緩衝區。這也不是一個好主意。
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');' – Fanael
因爲'%s'需要'char *',''a''是一個字符。另外,如果你這樣做,你應該用's + i'替換's' - 'sprintf()'無法知道它在哪裏完成了打印 - 它不是從終止開始的'strcat()' nul ... – 2012-09-07 15:03:38