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;
应该可以。反过来,您可以使用string
的c_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++ 不使用 C 标准库将字符串和 int 转换为 char*