問題は大変です。
文字列"1-2-3-4"
が読み取り専用メモリに格納されているため、strtok()
が(最初のトークンを分離するために)変更すると、プログラムがクラッシュするため、コアダンプが発生することが予想されます。あなたはクラッシュがstrtol()
にあると言う。 strtok()
の戻り値がNULLであることが示唆されます。
strtok()
の最初の呼び出しでは、文字列が引数として使用されます。 2回目の呼び出しは、その場所にNULLを渡して、「前回から中断した場所を続ける」ことを示します。書かれているように、文字列が変更可能な場合は、1
を4回解析します。
これは(未テストが)修正するために接近している:
一般的に
char input[] = "1-2-3-4";
char *data = input;
for (int i = 0; i < 4; i++)
{
char *token = strtok(data, "-");
if (token != 0)
{
long int a = strtol(token, NULL, 10);
cout << a << endl;
}
data = NULL;
}
は、あなたがstrtol()
からのエラー検出を行う必要があります。さらに、そうすることは非常に厄介です。ただし、サンプル文字列を使用すると、そのことについて心配する必要はありません。
あなたは私を打つこの時間を! =) –
ああ。あなたはいくつか勝つ、いくつかを失う。投票をしてください。 –