2013-05-14 23 views
1

我嘗試分配兩個C字符串一次:C++:在一行中爲char **分配兩個值?

char **pair = {"name","joe"}; 

但我收到錯誤消息:

'initializing' : cannot convert from 'const char [5]' to 'char **' 

但我覺得這樣的事情之前,爲我工作?

+1

這是C還是C++?用gcc 4.7.2,試試'char * pair [] = {「name」,「joe」};' – 2013-05-14 07:57:25

+0

[Simple C array declaration/assignment question]可能的重複(http://stackoverflow.com/questions/1582165/simple-c-array-declaration-assignment-question) – 2013-05-14 07:57:48

+3

另外,請訪問http://c-faq.com並閱讀指針。 **它們不是數組**並且數組也不是指針。 – 2013-05-14 07:58:26

回答

0

Joachim方法創建只讀字符串。這就是你如何創建一個常量字符串文字的數組。

的另一種方式,

// MAX_LEN being the max string length. 
char pair[][MAX_LEN] = {"name","joe"}; // This makes pair read-writeable, 
8

您聲明指針到指針但初始化是一個指針數組

const char *pair[] = { "name", "joe" }; 

如上所述我添加const關鍵字來聲明。這是因爲指針是指向字符串的指針,文字是常量並且不能更改。添加const可以幫助程序員不會錯誤地對數組中的字符串進行更改。

+1

+1也注意使用'const'。在答案中解釋這個值是否值得? – simonc 2013-05-14 07:58:45

2

使用C++的設施,這將節省你痛苦的世界:

vector<string> field = { "name", "joe" }; 

雖然也許你需要:

pair<string, string> field("name", "joe"); 

或者更好的是,可能:

struct Person { 
    Person(const string& name) : name(name) {} 
    const string name; 
}; 

Person boss("joe"); 
0

此處給出的所有答案都是正確的。選擇什麼取決於上下文:

  1. 如果你永遠不會改變在運行弦,去約阿希姆Pileborg的做法
  2. 如果您由於某種原因知道字符串有固定的長度,去Arun的
  3. 如果不是1或2,那麼去Peter Wood的。需要注意的是

    vector<string> field = { "name", "joe" }; 
    

    需要C++ 11

0

爲const char *對[] = { 「姓名」, 「喬」};

這是最好的解決方案