Удаляет ли базовое имя функции \ n в конце пути? - PullRequest
1 голос
/ 16 октября 2010

Удаляет ли базовое имя \ n в конце пути? Например, basename ("/ home / user / apple \ n") будет возвращать basename "apple \ n" или "apple" без \ n? Если базовое имя не избавляет от \ n, есть ли у кого-нибудь какие-либо предложения относительно способов избавления от \

Ответы [ 4 ]

2 голосов
/ 16 октября 2010

Функция basename не удалит завершающий '\n' из своего ввода просто потому, что в имени файла может быть завершающий перевод строки.

# write the string 'stackoverflow' to a file named "a\n"
$ echo 'stackoverflow' > 'a
> '
$ cat 'a
> '
stackoverflow
$ 

Так что если вы хотитечтобы удалить завершающий перевод строки, вам придется сделать это самостоятельно.

1 голос
/ 16 октября 2010

Вы должны удалить любой мусор из вашего ввода, который не является частью имени файла до , передавая его basename(), а не после.Это относится не только к \n, но и к кавычкам, разделителям полей и т. Д., Которые являются частью вашего формата данных, а не частью имени файла.Если имена файлов могут содержать произвольные символы и есть какой-то способ избежать их в вашем формате данных, вы также захотите удалить их.

Кстати, строго говоря, я считаю, что изменение строки может привести к неопределенному поведениювозвращается basename.Это не обязательно указатель на исходную строку.

1 голос
/ 16 октября 2010

Чтобы "удалить" завершающую '\n', я использую

buflen = strlen(buf);
if (buflen && (buf[buflen - 1] == '\n')) buf[--buflen] = 0;
0 голосов
/ 16 октября 2010

Путь не должен иметь '\n' в конце, поэтому кто знает, что будет делать basename. Также обратите внимание, что нет стандартной функции basename.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...