我對C++比較陌生。最近的分配要求我將大量字符緩衝區(從結構/套接字等)轉換爲字符串。我一直在使用以下變體,但看起來很尷尬。有沒有更好的方式來做這種事情?將char數組緩衝區轉換爲字符串的好方法?
#include <iostream>
#include <string>
using std::string;
using std::cout;
using std::endl;
char* bufferToCString(char *buff, int buffSize, char *str)
{
memset(str, '\0', buffSize + 1);
return(strncpy(str, buff, buffSize));
}
string& bufferToString(char* buffer, int bufflen, string& str)
{
char temp[bufflen];
memset(temp, '\0', bufflen + 1);
strncpy(temp, buffer, bufflen);
return(str.assign(temp));
}
int main(int argc, char *argv[])
{
char buff[4] = {'a', 'b', 'c', 'd'};
char str[5];
string str2;
cout << bufferToCString(buff, sizeof(buff), str) << endl;
cout << bufferToString(buff, sizeof(buff), str2) << endl;
}
問題是緩衝區沒有終止空值。 – 2009-05-22 02:20:22
使用常量字符串初始化char數組時,它會得到一個終止的空值。當你使用string :: c_str()時,你也會得到一個終止的null。我不明白你的投訴是什麼。 – 2009-05-22 02:27:56
答案中的代碼是正確的,但與問題不同。 「char buff [4] = {'a','b','c','d'};」不會給你一個以null結尾的字符串。 – markh44 2009-05-22 08:02:32