我的問題與這里的問題非常相似:Trimming a trailing a trailing \0 from fgets() in C
但是,建議的解決方案buffer[strcspn(buffer, "\n")] = 0;是我使用 char ** 來存盤令牌
這是我的代碼:
char str[1024];
fgets(str, 1024, stdin);
const char s[2] = " ";
char *token;
char ** token_arr = malloc(100 * sizeof(char*));
int pos = 0;
token = strtok(str, s);
while( token != NULL) {
token_arr[pos] = token;
printf( "%d %s\n", pos, token );
pos ;
token = strtok(NULL, s);
}
int i = 0;
while (token_arr[i]) {
printf("%d %s \n", i, token_arr[i]);
i ;
}
輸入:
a b c d e
每個回圈中的 printf 由一個空行分隔,我認為這是由于可能存盤在 token_arr 中的尾隨 \0 造成的。我怎樣才能洗掉它?
非常感謝
ETA:我的意思是每個列印回圈都在列印一個意外的額外空白行。
uj5u.com熱心網友回復:
與gets() 不同,fgets() 保留您輸入后輸入的換行符。
由于換行符不在您的標記串列中,它被保留為最后一個標記的一部分,因此是空行。
只需替換const char s[2] = " ";
為
const char s[3] = " \n";
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514912.html
標籤:数组C标记化fgets
