-6

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

代码是:

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

3 回答 3

3

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

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

您需要为s1and分配内存s2(或者只是使用std::string并省去自己的麻烦)。

于 2013-03-14T11:45:28.840 回答
0

您没有为s1或分配任何内存s2。您需要做的是使用new和分配内存,或者使用std::string并省去麻烦。

于 2013-03-14T11:47:11.053 回答
0

你还没有初始化s1s2指向任何东西;因此,尝试写入它们指向的内存(例如strncpy(s1,str,index))会产生未定义的行为 - 如果幸运的话,会出现分段错误。

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

于 2013-03-14T11:47:28.953 回答