の可変量の入力をトークン化するにはどうすれば、例えば、ユーザの入力をトークン化しようとしていますload sml.txt
。それは2つのトークンを持っているので loadコマンドが正常に動作しますが、私はdisplay
のような単一ワードの入力を使用しようとすると、それがクラッシュし、私にセグメンテーションフォルトを与えます。私は、2番目のトークンがNULLであると仮定しますが、この問題を回避する方法はわかりません。手伝ってくれますか?あなたの参照COMMAND_LOAD = "負荷" とCOMMAND_DISPLAY = "表示" のためにここでは言葉
。
int main(int argc, char **argv)
{
AddressBookList *addressBookList;
char input[BUFSIZ];
char load[BUFSIZ];
char fileN[BUFSIZ];
char *fileName;
char *token;
showStudentInformation();
do
{
printf("Enter your command: \n");
fgets(input, sizeof(input), stdin);
input[strlen(input) - 1] = '\0';
token = strtok(input, " ");
strcpy(load, token);
token = strtok(NULL, " ");
strcpy(fileN, token);
fileName = fileN;
if (strcmp(load, COMMAND_LOAD) == 0)
{
addressBookList = commandLoad(fileName);
}
else if (strcmp(load, COMMAND_UNLOAD) == 0)
{
/*commandUnload(fileName);*/
}
else if (strcmp(load, COMMAND_DISPLAY) == 0)
{
if (fileN == NULL)
{
printf("> No file loaded");
}
else
{
commandDisplay(addressBookList);
}
}
else
{
printf("> Invalid input\n\n");
}
} while (strcmp(load, COMMAND_QUIT) != 0);
return EXIT_SUCCESS;
}
token'は 'のstrcpy()を呼び出す前に' 'NULL'ある'かどうかを確認します。 – Barmar
'strtok'の戻り値をチェックして、何かをしようとする前にNULLかどうかを調べる必要があります。 –