首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中将一个字符移过strrchr

在C中将一个字符移过strrchr
EN

Stack Overflow用户
提问于 2015-01-27 17:18:12
回答 2查看 127关注 0票数 0

我觉得这应该是一件容易的事情,但我不断地得到分割错误错误。我试图找到一个字符的最后一次出现,'/‘,然后打印一个过去的字符。

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

directory1/directory2/hello.txt

应该这样打印出来:

hello.txt

我试图使用strrchr来完成这个任务,但是由于它返回了一个字符的最后一次出现,所以它会打印出以下内容:

/hello.txt

我想我可以先将字符指针移过斜杠一步,然后打印出来,但是我得到了一个分段错误:

代码语言:javascript
复制
void print_path(char *dir_name)
{
    char *c_ptr = strrchr(dir_name, '/');
    *c_ptr = *c_ptr + 1;
    printf("%s\n", c_ptr);
}

我还查看了一下,尝试执行一种方法,将c_ptr复制到temp变量,将一个新的temp字符串添加到新的temp字符串中,然后在末尾添加一个空字符,但这也会导致错误。

我该怎么办?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-27 17:20:44

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

代码语言:javascript
复制
*c_ptr = *c_ptr + 1; // incorrect

它应该是

代码语言:javascript
复制
c_ptr = c_ptr + 1;

代码语言:javascript
复制
c_ptr++;

代码语言:javascript
复制
c_ptr += 1;

*c_ptr = *c_ptr + 1中,您将取消引用指针,并在字符串( 1 )所在的位置添加到前面的值。

strrchr之后,c_ptr将指向'/'字符,即*c_ptr == '/' so

*c_ptr = *c_ptr + 1;

等于

代码语言:javascript
复制
c_ptr[0] = c_ptr[0] + 1;

代码语言:javascript
复制
c_ptr[0] = '/' + 1;

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

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

程序的固定版本将是

代码语言:javascript
复制
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);
    }
}
票数 4
EN

Stack Overflow用户

发布于 2015-01-27 17:27:11

问题在于这一行:

代码语言:javascript
复制
*c_ptr = *c_ptr + 1;

你在取消c_ptr的引用。这意味着你得到了'/' + 1的价值,不管它是什么。你想要的是:

代码语言:javascript
复制
void print_path(char *dir_name)
{
    char *c_ptr = strrchr(dir_name, '/');
    c_ptr = c_ptr + 1;
    printf("%s\n", c_ptr);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28176166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档