我只是想从字符串中提取两个子串。但它显示出分段错误。
代码为:
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;
}
答案 0 :(得分:3)
以下两行是复制到未初始化指针引用的内存中:
strncpy(s1,str,index);
strncpy(s2,str+index,no);
你需要为s1
和s2
分配内存(或者只使用std::string
并为自己省去头痛)。
答案 1 :(得分:0)
您尚未为s1
或s2
分配任何内存。您需要做的是使用new
并分配内存或者使用std::string
并省去麻烦。
答案 2 :(得分:0)
您尚未初始化s1
或s2
指向任何内容;因此,尝试写入他们指向的内存(例如strncpy(s1,str,index)
)会给出未定义的行为 - 如果幸运的话,会出现分段错误。
如果您正在编写C,那么为它们分配内存;如果您正在编写C ++,请使用std::string
为您管理内存分配。