字符串中的分段错误

时间:2013-03-14 11:41:56

标签: c++ c

我只是想从字符串中提取两个子串。但它显示出分段错误。

代码为:

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;       
}

3 个答案:

答案 0 :(得分:3)

以下两行是复制到未初始化指针引用的内存中:

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

你需要为s1s2分配内存(或者只使用std::string并为自己省去头痛)。

答案 1 :(得分:0)

您尚未为s1s2分配任何内存。您需要做的是使用new并分配内存或者使用std::string并省去麻烦。

答案 2 :(得分:0)

您尚未初始化s1s2指向任何内容;因此,尝试写入他们指向的内存(例如strncpy(s1,str,index))会给出未定义的行为 - 如果幸运的话,会出现分段错误。

如果您正在编写C,那么为它们分配内存;如果您正在编写C ++,请使用std::string为您管理内存分配。