2017-04-03 52 views
0

我有以下模式的字符串:如何断线用C与/

char *str = "ai/aj/module_mat.mod"; 

,我想选择module_mat为我,为进一步的逻辑最终的字符串。我曾尝试使用rindex(),以便可以获取字符串的最后部分。但我无法用C做这件事。我做错了什么?

我想要的代码是 -

char *first = rindex(str, "/"); 
char *first = strtok(first, "."); 

回答

1

你的错误就在这里:

char *str = "ai/aj/module_mat.mod"; 

由于str指向一个恒定的,这应该是:

const char *str = "ai/aj/module_mat.mod"; 

现在你的编译器应该会告诉你其他的问题。

同理:

char *first = rindex(str, "/"); 

由于rindex返回一个指针到你通过它的不变,该指针也应该是const

char *first = strtok(first, "."); 

嗯,有什么事对strtok文档说:

如果找到一个分隔符字节,它被覆盖以空字节 终止当前令牌,和strtok()函数节省了指向下一个字节的指针; ...

所以strtok改变事物的指针指向,所以它传递一个指向常数!你不能修改一个常量。

0

首先,字符串文字是不可变的,所以将它绑定到可变字符指针是非常危险的。首先解决您的代码:

const char* str = "ai/aj/module_mat.mod"; 

接下来,使用strchr

#include <string.h> 

const char* p = strchr(str, '/'); 
if (p != NULL) { 
    ++p; 
    printf("Last part: %s\n", p); 
} else { 
    printf("No '/' found in string %s.\n", str); 
} 

如果在字符串中找到了/p将指向它,因此p可以作为后缀子原始字符串,并且不需要修改原始字符串。我们提前p一个跳过/并留下字符串的最后部分。

+0

[Demo](https://ideone.com/9jjFje) –

+0

好的。这有助于。如果我想使用strtok(),rindex()和其他一些可能的函数从上面指定的字符串中只提取“module_mat”?因为我也有错误。 –

+0

@AniruddhaTekade:那么,你需要一个可变字符串作为'strtok'等,所以你需要做一个副本或类似的东西。 –