【问题标题】:C++ String and char * c stype stringsC++ 字符串和 char * c stype 字符串
【发布时间】:2011-04-28 16:48:14
【问题描述】:

我有一个使用 char 数组作为字符串的 c 库,我想在我的代码中使用 c++ std::string, 有人可以帮我如何在 char * c 样式字符串和 STL 库字符串之间进行转换吗?

例如我有:

char *p="abcdef";
string p1;

string x="abc";
char *x1;

如何将 p 转换为 p1 并将 x 转换为 x1

【问题讨论】:

  • 请注意,char* p="abcdef" 至少是非常危险的,如果不是完全错误的话。那是因为您无法写入字符串文字,因此p[0]='a' 会将您带入未定义的行为领域。指针应声明为const,以确保您不会意外这样做。还要注意,用字面量构造std::strings时不存在这样的问题。

标签: c++ visual-c++


【解决方案1】:

使用字符串的赋值运算符从 char *: 中填充它:

p1 = p;

使用字符串的 c_str() 方法返回一个 const char *:

x1 = x.c_str();

【讨论】:

    【解决方案2】:

    从 char* 到 std::string :

    char p[7] = "abcdef";
    std::string s = p;
    

    从 std::string 到 char* :

    std::string s("abcdef");
    const char* p = s.c_str();
    

    【讨论】:

    • 可能更漂亮,但效率较低。您的版本会创建字符串文字的本地副本。
    【解决方案3】:

    您可以从 C 字符串构造一个std::string,因此:

    string p1 = p;
    

    您可以从std::string 获得const char *,因此:

    const char *x1 = x.c_str();
    

    如果你想要一个char *,你需要创建一个字符串的副本:

    char *x1 = new char[x.size()+1];
    strcpy(x1, x.c_str());
    ...
    delete [] x1;
    

    【讨论】:

      【解决方案4】:

      string 有一个构造函数和一个赋值运算符,它们将char const* 作为参数,所以:

      string p1(p);
      

      string p1;
      p1 = p;
      

      应该可以。反过来,您可以使用stringc_str() 方法从string 获得char const*(不是字符*)。那是

      char const* x1 = x.c_str();
      

      【讨论】:

        【解决方案5】:
        #include <string.h>
        #include <stdio.h>
        
        // Removes character pointed to by "pch"
        // from whatever string contains it.
        void delchr(char* pch)
        {
            if (pch)
            {
                for (; *pch; pch++)
                    *pch = *(pch+1);
            }
        }
        
        void main()
        {
            // Original string
            char* msg = "Hello world!";
        
            // Get pointer to the blank character in the message
            char* pch = strchr(msg, ' ');
        
            // Delete the blank from the message
            delchr(pch);
        
            // Print whatever's left: "Helloworld!"
            printf("%s\n", msg);
        }
        

        【讨论】:

          猜你喜欢
          • 2018-09-02
          • 1970-01-01
          • 2013-10-30
          • 1970-01-01
          • 1970-01-01
          • 2021-07-19
          • 1970-01-01
          • 2021-12-06
          相关资源
          最近更新 更多