C++ 字符串和 char * c stype 字符串

Posted

技术标签:

【中文标题】C++ 字符串和 char * c stype 字符串【英文标题】:C++ String and char * c stype strings 【发布时间】: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时不存在这样的问题。 【参考方案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);

【讨论】:

以上是关于C++ 字符串和 char * c stype 字符串的主要内容,如果未能解决你的问题,请参考以下文章

c++字符串LPCTSTR格式转化为char*

c++ 不使用 C 标准库将字符串和 int 转换为 char*

c++ char字符组拼接

C++的字面值和字面值类型

string.h和stype.h常用函数讲解,隔壁老王看了直呼eazy!C语言

[C++]语言基础