【问题标题】:Convert char* to string C++将 char* 转换为字符串 C++
【发布时间】:2012-01-16 08:15:06
【问题描述】:

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

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

EDIT:内存是为写入和读取可变长度字符串而保留的。也就是说int l;表示的是内存的大小,而不是字符串的长度。

【问题讨论】:

  • 这真的是基本的 C++。我会推荐a good introductory C++ book
  • 避免混淆:std::string 与 C++ 中的 char[] 字符串不同std::string 有很多其他的东西。
  • 当你说“最大长度”时,你的意思是字符串可能比那个短吗?
  • @MarkRansom 是的。内存用于写入和读取可变长度的字符串
  • 现有的两个答案都没有真正解决这种情况。您应该编辑问题以使其更清楚。

标签: c++ string char


【解决方案1】:
std::string str(buffer, buffer + length);

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

str.assign(buffer, buffer + length);

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

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

【讨论】:

  • 巧妙地使用find!我从没想过将未找到的返回值用于任何事情!
【解决方案2】:
char *charPtr = "test string";
cout << charPtr << endl;

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

【讨论】:

  • 这个答案被低估了!
【解决方案3】:

您的解释中似乎遗漏了一些细节,但我会尽力而为...

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

string retrieveString( char* buf, int max ) {

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

    return string( buf, len );

}

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

【讨论】:

  • 如果给定的字符串保证为 NULL,那么您只需要 string(buf) 就可以了。如果可能不行,那么你必须使用这个方法。
【解决方案4】:

使用字符串的构造函数

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

编辑:

好的,那么如果没有明确给出C字符串长度,使用ctor:

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

【讨论】:

    【解决方案5】:
    std::string str;
    char* const s = "test";
    
    str.assign(s);
    

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

    参考/s here.

    【讨论】:

      【解决方案6】:

      让,

      char* rw="hii";  //This string is readable and writeable
      
      const char* r="hello"; // This string is only readable 
      

      我们可以借助字符串的构造函数将 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' 都是可写和可读的。

      【讨论】:

        猜你喜欢
        • 2018-03-27
        • 2013-05-13
        • 2018-09-02
        • 2010-11-22
        • 1970-01-01
        • 1970-01-01
        • 2019-04-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多