gpt4 book ai didi

c - 在 C 中将一个字符推进到 strrchr 之后

转载 作者:太空宇宙 更新时间:2023-11-04 06:25:06 25 4
gpt4 key购买 nike

我觉得这应该是一件容易的事,但我一直收到段错误。我正在尝试查找最后一次出现的字符“/”,然后在该字符后打印一个字符。

这主要是为了打印出一个文件,这样:

directory1/directory2/hello.txt

应该这样打印出来:

你好.txt

我正在尝试使用 strrchr 来执行此操作,但由于它会返回字符的最后一次出现,因此它会打印出以下内容:

/hello.txt

我以为我可以将字符指针提前一个斜线,然后打印它,但是我在这样做时遇到了段错误:

void print_path(char *dir_name)
{
char *c_ptr = strrchr(dir_name, '/');
*c_ptr = *c_ptr + 1;
printf("%s\n", c_ptr);
}

我也环顾四周并尝试做一个方法,我将 c_ptr 复制到一个临时变量,将一个添加到新的临时字符串,然后在末尾添加一个空字符,但这也导致了错误。

我该怎么办?

最佳答案

你应该做指针运算,这是错误的:

*c_ptr = *c_ptr + 1; // incorrect

应该是

c_ptr = c_ptr + 1;

c_ptr++;

c_ptr += 1;

*c_ptr = *c_ptr + 1 中,您取消引用指针并在字符串开头添加到先前的值,1

strrchr之后,c_ptr会指向'/'字符,即*c_ptr == '/'所以

*c_ptr = *c_ptr + 1;

相当于

c_ptr[0] = c_ptr[0] + 1;

c_ptr[0] = '/' + 1;

之后,c_ptr[0] 包含字符 '0',因此 printf() 必须打印 0你好.txt

如果在源字符串中未找到子字符串,strrchr() 将返回 NULL,因此您也应该检查一下。

你的程序的固定版本是

void print_path(char *dir_name)
{
char *c_ptr = strrchr(dir_name, '/');
if (c_ptr != NULL)
{
c_ptr = c_ptr + 1;
printf("%s\n", c_ptr);
}
}

关于c - 在 C 中将一个字符推进到 strrchr 之后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28176166/

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