basename是否会在路径末尾剥离\ n?例如basename(“/ home / user / apple \ n”)basename返回“apple \ n”或“apple”而没有\ n?如果basename没有摆脱\ n有没有人有任何建议去摆脱\
答案 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
函数。