函数basename是否剥离了路径末尾的\ n?

时间:2010-10-16 17:55:53

标签: c posix

basename是否会在路径末尾剥离\ n?例如basename(“/ home / user / apple \ n”)basename返回“apple \ n”或“apple”而没有\ n?如果basename没有摆脱\ n有没有人有任何建议去摆脱\

4 个答案:

答案 0 :(得分:2)

basename函数不会从输入中删除尾随'\n',因为文件名中可能包含尾随换行符。

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

因此,如果你想删除尾随换行符,你必须自己动手。

答案 1 :(得分:1)

要“删除”终止'\n'我使用

buflen = strlen(buf);
if (buflen && (buf[buflen - 1] == '\n')) buf[--buflen] = 0;

答案 2 :(得分:1)

在将传递给basename()之前而不是之后,您应该从输入中删除任何不属于文件名的垃圾。这不仅适用于\n,还适用于引号,字段分隔符等,它们是数据格式的一部分,而不是文件名的一部分。如果文件名可以包含任意字符,并且有一些方法可以在数据格式中转义它们,那么您也可以想要使用它们。

顺便说一句,严格来说,我认为修改basename返回的字符串可能是未定义的行为。它不一定是指向原始字符串的指针。

答案 3 :(得分:0)

路径末尾不应该有'\n',因此谁知道basename会做什么。另请注意,没有标准的basename函数。