我有使用字符數組作爲字符串的ac庫,我想在我的代碼上使用C++ std :: string, 有人可以幫我轉換char * c樣式字符串和STL庫字符串?C++字符串和char * c stype字符串
,比如我有:
char *p="abcdef";
string p1;
和
string x="abc";
char *x1;
我如何轉換p來p1和X到X1
我有使用字符數組作爲字符串的ac庫,我想在我的代碼上使用C++ std :: string, 有人可以幫我轉換char * c樣式字符串和STL庫字符串?C++字符串和char * c stype字符串
,比如我有:
char *p="abcdef";
string p1;
和
string x="abc";
char *x1;
我如何轉換p來p1和X到X1
使用字符串的賦值操作符從一個字符填充它* :
p1 = p;
使用字符串的c_str()方法返回一個const char *:
x1 = x.c_str();
從CHAR *到的std :: string:
char p[7] = "abcdef";
std::string s = p;
從的std :: string爲char *:
std::string s("abcdef");
const char* p = s.c_str();
你的第二個代碼片段不會被編譯。 – 2011-04-28 16:52:12
你的第一個片段中的'char'指針應該是'const'。 – 2011-04-28 17:39:22
更漂亮,也許效率更低。您的版本創建一個字符串文字的本地副本。 – 2011-04-28 21:28:29
您可以從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;
+1記住使用'數組刪除' – 2011-04-28 17:06:17
string
有一個構造函數和以char const*
作爲參數,因此:
string p1(p);
或
string p1;
p1 = p;
應該工作。反過來說,你可以用c_str()
方法從string
得到char const*
(不是char *)。也就是說
char const* x1 = x.c_str();
#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);
}
注意,'的char * p = 「ABCDEF」'至少是非常危險的,如果不是完全錯誤的。那是因爲你不能寫入字符串文字,所以'p [0] ='a''會引發你進入Undefined Behavior Land。指針應該聲明爲'const',以確保你不會意外地做到這一點。還要注意,當用文字構造'std :: strings'時不存在這樣的問題。 – 2011-04-28 17:35:11