2013-03-14 39 views
-5

我只是試圖從字符串中提取兩個子字符串。但它顯示出分段錯誤。字符串中的段錯誤

的代碼是:

const char *str; 
char *s1, *s2; 

str = "name:d"; 
char *pos = strchr(str, ':'); 
size_t no = 1, 
     index = pos - str; 

if (index > 0) 
{ 
    strncpy(s1, str, index); 
    cout << "name is:" << s1; 
    index++; 
    strncpy(s2, str + index, no); 
    cout << "direction is:" << s2;  
} 
+1

屬於http://debug-my-code-for-me.com – 2013-03-14 11:47:38

+1

C或C++?選一個。如果後者使用'std :: string'。 – 2013-03-14 11:48:04

+0

@ user2114865如果指針不指向任何地方,它們會很傷心 – 2013-03-14 11:49:58

回答

3

以下兩行復制到內存未初始化的指針引用:

strncpy(s1,str,index); 
strncpy(s2,str+index,no); 

你需要爲s1s2分配內存(或者只是使用std::string併爲自己節省頭痛)。

0

您尚未爲s1s2分配任何內存。你需要做的是使用new並分配內存或者使用std::string並省去麻煩。

0

您尚未初始化s1s2指向任何東西;所以試圖寫入他們指向的內存(例如strncpy(s1,str,index))會給出未定義的行爲 - 如果幸運的話,會出現分段錯誤。

如果您正在編寫C,然後爲它們分配內存;如果您正在編寫C++,請使用std::string爲您管理內存分配。