2011-04-28 59 views
3

我有使用字符數組作爲字符串的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

+3

注意,'的char * p = 「ABCDEF」'至少是非常危險的,如果不是完全錯誤的。那是因爲你不能寫入字符串文字,所以'p [0] ='a''會引發你進入Undefined Behavior Land。指針應該聲明爲'const',以確保你不會意外地做到這一點。還要注意,當用文字構造'std :: strings'時不存在這樣的問題。 – 2011-04-28 17:35:11

回答

7

使用字符串的賦值操作符從一個字符填充它* :

p1 = p; 

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

x1 = x.c_str(); 
5

從CHAR *到的std :: string:

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

從的std :: string爲char *:

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

你的第二個代碼片段不會被編譯。 – 2011-04-28 16:52:12

+0

你的第一個片段中的'char'指針應該是'const'。 – 2011-04-28 17:39:22

+0

更漂亮,也許效率更低。您的版本創建一個字符串文字的本地副本。 – 2011-04-28 21:28:29

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; 
+0

+1記住使用'數組刪除' – 2011-04-28 17:06:17

2

string有一個構造函數和以char const*作爲參數,因此:

string p1(p); 

string p1; 
p1 = p; 

應該工作。反過來說,你可以用c_str()方法從string得到char const*(不是char *)。也就是說

char const* x1 = x.c_str(); 
0
#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); 
}