Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 函数basename是否会删除路径末尾的\n?_C_Posix - Fatal编程技术网

C 函数basename是否会删除路径末尾的\n?

C 函数basename是否会删除路径末尾的\n?,c,posix,C,Posix,basename是否在路径的末尾\n剥离?例如basename/home/user/apple\n basename会返回apple\n还是返回不带\n的apple?如果basename无法摆脱\路径的末尾不应该有“\n”,那么谁知道basename会做什么呢。还请注意,没有标准的basename函数。路径的末尾不应该有“\n”,所以谁知道basename会做什么。还请注意,没有标准的basename函数。要删除终止'\n',我使用 要删除终止的'\n',我使用 函数不会仅仅因为文件名中可以有尾

basename是否在路径的末尾\n剥离?例如basename/home/user/apple\n basename会返回apple\n还是返回不带\n的apple?如果basename无法摆脱\

路径的末尾不应该有“\n”,那么谁知道basename会做什么呢。还请注意,没有标准的basename函数。

路径的末尾不应该有“\n”,所以谁知道basename会做什么。还请注意,没有标准的basename函数。

要删除终止'\n',我使用

要删除终止的'\n',我使用

函数不会仅仅因为文件名中可以有尾随换行符而从输入中删除尾随“\n”

# write the string 'stackoverflow' to a file named "a\n"
$ echo 'stackoverflow' > 'a
> '
$ cat 'a
> '
stackoverflow
$ 
因此,如果要删除尾随的换行符,您必须自己删除。

该函数不会仅仅因为文件名中可能包含尾随的换行符而从其输入中删除尾随的“\n”

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

因此,如果您想删除尾随的换行符,您必须自己删除。

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


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

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



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

您是说目录吗?Basename不是标准库的一部分。你能为它发送一个指向API文档、源代码等的链接吗?basename不是C标准库的一部分,但它是POSIX的一部分,因此它是99%平台堆栈溢出用户程序的一部分。你是说目录吗?basename不是标准库的一部分。您可以发送一个指向API文档、源代码等的链接吗?basename不是C标准库的一部分,但它是POSIX的一部分,因此它是99%平台堆栈溢出用户程序的一部分。我正在从一个文件准备,其中一些内容的路径名结尾带有\n。我需要一种方法来除去\n文件名中允许的\n任何系统。@KunGor:那么您需要第一个阶段来删除它们!像char*p=str这样简单的东西;而*p!='\0'{if*p='\n'{*p='\0';}p++;},也许。@nos:By\n,我们说的是字符'\'后跟字符'n',还是说\n?@Oli Charlesworth换行符。虽然在许多系统上,a\后跟n也没什么特别的,但我正在准备从一个文件中读取,其中一些内容的路径名末尾有一个\n。我需要一种方法来除去\n文件名中允许的\n任何系统。@KunGor:那么您需要第一个阶段来删除它们!像char*p=str这样简单的东西;而*p!='\0'{if*p='\n'{*p='\0';}p++;},也许。@nos:By\n,我们说的是字符'\'后跟字符'n',还是说\n?@Oli Charlesworth换行符。虽然在许多系统上,a\后跟n也没有什么特别之处,但KunGor应该将其写成buflen>0&&。。。这样才能记住第一部分条件的原因是什么。但是KunGor应该把它写成buflen>0&&。。。以便能够记住该条件第一部分的原因是什么。