我是一個新的C程序員,所以你將不得不原諒我缺乏知識。慢慢地,但我確定我正在改善。我想知道爲什麼我不能使用下面的代碼嘗試去除fgets在抓取用戶輸入時引入的'/ n'。它在第一次印刷聲明後中斷。我覺得我正在做一些危險的事情,但我不確定是什麼。爲什麼我不能用strtok()以下面的方式使用strcpy()
if (fgets(rawCommand, sizeof (rawCommand), stdin)) {
printf("\nTest: %s\n", rawCommand); //test print
strcpy(rawCommand, strtok(rawCommand, '\n')); //to get rid of the '\n' that fgets introduces
rawCommand[ strlen(rawCommand) - 1 ] = '\0';
printf("\nTest: %s\n", rawCommand); //test print
所有建議表示讚賞,但請保持建設性。謝謝。
1.不能保證'fgets()'返回的行以換行符結束。不管怎樣,'strcpy'不是這樣做的。只需在字符串末尾尋找換行符,並且如果找到**,則設置爲0.在重疊緩衝區上的「strcpy()」調用*未定義行爲*。並且檢查'fgets()'沒有返回NULL。你會很驚訝,現在很多人都忽略了這一點。 – WhozCraig
,應該是'strtok(rawCommand,「\ n」),'第二個參數需要'char *',而不是'char'。 – BLUEPIXY