gpt4 book ai didi

c - 获取一定长度的字符串。

转载 作者:太空宇宙 更新时间:2023-11-04 03:01:34 24 4
gpt4 key购买 nike

我目前正在处理一个文件名,我需要获取不包括扩展名的名称。我有一个单独的函数来确定文件的扩展名,但找不到没有扩展名的方法来获取名称。

如果我有文件名 mylog.txt 我只想能够取出 mylog

我试过以下方法

strncpy(fileNameWithoutExt, LogRotateConfiguration->logFileName,
strlen(LogRotateConfiguration->logFileName-strlen(fileExtension)-1));

但出于某种原因,当我运行它时,我只得到 m 而不是文件名的其余部分。我永远不会知道文件名或扩展名中有很多字符,因此需要确定需要获取的部分。

所以基本上,问题是我如何获得没有扩展名的文件名。

感谢您提供的任何帮助。

最佳答案

嗯?

您是否认真地从传递给 strlen() 的指针中减去扩展的长度?这看起来既危险又奇怪。

另外,你不应该使用 strncpy() 除非你真的需要它相当古怪的语义。您很可能不这样做,使用它来复制较长字符串的一部分是一种很好的失败方法。

更好的解决方案通常是找出长度,然后使用 memcpy():

char         out[WHATEVER];
const size_t len = strlen(LogRotateConfiguration->logFileName);
const size_t elen = strlen(fileExtension);
const size_t out_len = len - elen;

if( out_len < sizeof out )
{
memcpy(out, LogRotateConfiguration->logFileName, out_len);
out[out_len] = '\0';
}
else
out[0] = '\0'; /* Make sure we get an empty output if filename won't fit. */

请注意,这也在适当的地方使用 const,并将 strlen() 的返回值存储在适当类型的变量中,即 size_t.

关于c - 获取一定长度的字符串。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11052141/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com