我觉得这应该是一件容易的事情,但我不断地得到分割错误错误。我试图找到一个字符的最后一次出现,'/‘,然后打印一个过去的字符。
这主要是为了打印出一个文件,因此:
directory1/directory2/hello.txt
应该这样打印出来:
hello.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复制到temp变量,将一个新的temp字符串添加到新的temp字符串中,然后在末尾添加一个空字符,但这也会导致错误。
我该怎么办?
发布于 2015-01-27 17:20:44
你应该做指针运算,这是错误的:
*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 == '/' so
*c_ptr = *c_ptr + 1;
等于
c_ptr[0] = c_ptr[0] + 1;即
c_ptr[0] = '/' + 1;之后,c_ptr[0]包含字符'0',因此printf()必须打印0hello.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);
}
}发布于 2015-01-27 17:27:11
问题在于这一行:
*c_ptr = *c_ptr + 1;你在取消c_ptr的引用。这意味着你得到了'/' + 1的价值,不管它是什么。你想要的是:
void print_path(char *dir_name)
{
char *c_ptr = strrchr(dir_name, '/');
c_ptr = c_ptr + 1;
printf("%s\n", c_ptr);
}https://stackoverflow.com/questions/28176166
复制相似问题