将char*转换为字符串C++

38

我知道字符串的起始地址(例如:char* buf)和字符串的最大长度 int l;(即,字符总数小于或等于l)。

从指定的内存段获取string值的最简单方法是什么?换句话说,如何实现string retrieveString(char* buf, int l);

编辑:该内存段为写入和读取变长字符串而保留。换句话说,int l;表示内存的大小而不是字符串的长度。


2
这是非常基础的C++。我会推荐一本好的入门C++书籍。 - R. Martinho Fernandes
1
当你说“最大长度”时,你是指字符串可能比那个长度短吗? - Mark Ransom
@MarkRansom 是的。该内存被保留用于读写可变长度的字符串。 - Terry Li
1
两个现有的答案都没有真正解决这种情况。你应该编辑问题,使其更清晰明了。 - Mark Ransom
显示剩余3条评论
6个回答

28
std::string str(buffer, buffer + length);

或者,如果该字符串已经存在:

str.assign(buffer, buffer + length);

编辑:我仍然不完全确定我理解了这个问题。但如果像JoshG所建议的那样,你想要最多length个字符,或者直到空终止符为止,以先到者为准,则可以使用以下代码:

std::string str(buffer, std::find(buffer, buffer + length, '\0'));

3
巧妙地使用了find函数!我从未想过可以利用返回值为“未找到”的情况做任何事情! - Mooing Duck

25
char *charPtr = "test string";
cout << charPtr << endl;

string str = charPtr;
cout << str << endl;

4
这个答案被低估了! - intumwa

3
使用字符串的构造函数。
basic_string(const charT* s,size_type n, const Allocator& a = Allocator());

编辑:

如果没有显式给出C字符串的长度,则使用构造函数:

basic_string(const charT* s, const Allocator& a = Allocator());

2

你的解释好像有一些细节被省略了,但是我会尽力...

如果这些是以NUL结尾的字符串或者内存已经被预先清零,你可以沿着内存段向下迭代直到遇到一个NUL(0)字符或最大长度(以先到为准)。使用字符串构造函数,传递缓冲区和在上一步确定的大小。

string retrieveString( char* buf, int max ) {

    size_t len = 0;
    while( (len < max) && (buf[ len ] != '\0') ) {
        len++;
    }

    return string( buf, len );

}

如果不是这种情况,我不确定您如何确定字符串的结束位置。

1
如果给定的字符串保证有NULL,那么你所需要的就是 string(buf),然后就没问题了。但是如果不确定是否有NULL,那么你就必须使用这个方法。 - Mooing Duck

1
std::string str;
char* const s = "test";

str.assign(s);

string& assign (const char* s); => signature FYR

参考资料 在这里


0

让我们,

char* rw="hii";  //This string is readable and writeable

const char* r="hello"; // This string is only readable 

我们可以通过string的构造函数将char*或const char*转换为字符串。
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".

在这两个例子中,字符串 'st' 是可读写的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接