2013-03-14 88 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为您管理内存分配。