Usuwanie nowej linii nie działa po sprawdzeniu, czy istnieje
Tworzę kod, który analizuje niektóre dane wejściowe i zapisuje je w pliku w specjalnym formatowaniu. Usuwam nową linię z każdego tokena jako tak:
token[strlen(token)-2] ='\0'
To jest-2
ponieważ ostatnim elementem jest\0
. To działa. Jednak ostatni element danych wejściowych NIE ma nowej linii, więc użycie właśnie tego kończy się usunięciem drugiego do ostatniego znaku z ostatniego zestawu danych wejściowych.
original input: 0.38
after running it through the removal: 0.3
Oczywistym rozwiązaniem jest sprawdzenie, czy nowa linia jest tam przed usunięciem. Robię to:
if(token[strlen(token)-2] =='\n') token[strlen(token)-2] ='\0';
Jednak po dodaniu klauzuli if nowa linia nie jest już usuwana! Co ja robię źle? Snippit z całego kodu:
while((token = strsep(&line, ",")) != NULL){
if(x++ == 1){
fwrite(" <item>\n", 11, 1, fw);
fwrite(" <name>", 14, 1, fw);
fwrite(token, strlen(token), 1, fw);
fwrite("</name>\n", 8, 1, fw);
}
else if(isdigit(token[0])) {
if(token[strlen(token)-2] =='\n') token[strlen(token)-2] ='\0';
fwrite(" <SPC>", 13, 1, fw);
fwrite(token, strlen(token), 1, fw);
fwrite("</SPC>\n", 7, 1, fw);
fwrite(" </item>\n", 12, 1, fw);
}
}