我知道字符串的起始地址(例如:char* buf
)和字符串的最大长度 int l;
(即,字符总数小于或等于l
)。
从指定的内存段获取string
值的最简单方法是什么?换句话说,如何实现string retrieveString(char* buf, int l);
。
编辑:该内存段为写入和读取变长字符串而保留。换句话说,int l;
表示内存的大小而不是字符串的长度。
我知道字符串的起始地址(例如:char* buf
)和字符串的最大长度 int l;
(即,字符总数小于或等于l
)。
从指定的内存段获取string
值的最简单方法是什么?换句话说,如何实现string retrieveString(char* buf, int l);
。
编辑:该内存段为写入和读取变长字符串而保留。换句话说,int l;
表示内存的大小而不是字符串的长度。
std::string str(buffer, buffer + length);
或者,如果该字符串已经存在:
str.assign(buffer, buffer + length);
编辑:我仍然不完全确定我理解了这个问题。但如果像JoshG所建议的那样,你想要最多length
个字符,或者直到空终止符为止,以先到者为准,则可以使用以下代码:
std::string str(buffer, std::find(buffer, buffer + length, '\0'));
char *charPtr = "test string";
cout << charPtr << endl;
string str = charPtr;
cout << str << endl;
basic_string(const charT* s,size_type n, const Allocator& a = Allocator());
编辑:
如果没有显式给出C字符串的长度,则使用构造函数:
basic_string(const charT* s, const Allocator& a = Allocator());
你的解释好像有一些细节被省略了,但是我会尽力...
如果这些是以NUL结尾的字符串或者内存已经被预先清零,你可以沿着内存段向下迭代直到遇到一个NUL(0)字符或最大长度(以先到为准)。使用字符串构造函数,传递缓冲区和在上一步确定的大小。
string retrieveString( char* buf, int max ) {
size_t len = 0;
while( (len < max) && (buf[ len ] != '\0') ) {
len++;
}
return string( buf, len );
}
string(buf)
,然后就没问题了。但是如果不确定是否有NULL,那么你就必须使用这个方法。 - Mooing Duckstd::string str;
char* const s = "test";
str.assign(s);
string& assign (const char* s); => signature FYR
参考资料 在这里。
让我们,
char* rw="hii"; //This string is readable and writeable
const char* r="hello"; // This string is only readable
string string_name(parameter);
该参数接受char*和const char*类型。
示例:
1) string st(rw);
Now string 'st', contains "hii"
2) string st(r);
Now, string 'st' contains "hello".