-6

文字列から 2 つの部分文字列を抽出しようとしています。しかし、それはセグメンテーション違反を示しています。

コードは次のとおりです。

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

次の 2 行は、初期化されていないポインターによって参照されるメモリにコピーしています。

 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 に答える