C 如何在两个特定字符之间拆分字符串?

C 如何在两个特定字符之间拆分字符串?,c,C,我有一个字符串(文件名),我想提取到个字符之间的字符串,例如: string="/export/aibn84_2/SED/Sbc_cww.sed" 我需要将最后一个“/”和“\u cww.sed”之间的字符串存储在数组中,以便以后使用。 谁能给我一些提示吗 另外,如果我想读取文件列表并将这部分文件名分隔开来,然后定义一个字符串数组并将它们保存在数组的元素中,我应该如何应用它 有两个功能正在使用: strrchr->查找字符串中最后出现的字符 strncpy->从字符串中复制第一个num字符 s

我有一个字符串(文件名),我想提取到个字符之间的字符串,例如:

string="/export/aibn84_2/SED/Sbc_cww.sed"
我需要将最后一个
“/”
“\u cww.sed”
之间的字符串存储在数组中,以便以后使用。 谁能给我一些提示吗


另外,如果我想读取文件列表并将这部分文件名分隔开来,然后定义一个字符串数组并将它们保存在数组的元素中,我应该如何应用它

有两个功能正在使用:

strrchr
->查找字符串中最后出现的字符

strncpy
->从字符串中复制第一个num字符

strstr
->返回指向str1中第一个出现的str2的指针

char str[] = "/export/aibn84_2/SED/Sbc_cww.sed";
char* pch;
pch=strrchr(str,'/');
char* pch2;
pch2=strstr(str,"_cww.sed");
char value[40];
strncpy(value, pch+1, pch2-(pch+1));
printf("%s\n", value);
#包括
#包括
int main(){
char str[]=“/export/aibn84_2/SED/Sbc_cww.SED”;//定义完整数组
char*str_start=strrchr(str,“/”)+1;//查找最后一个“/”后面的第一个字符
char*str_end=strstrstr(str_start,“\u cww.sed”);//在最后一个“/”之后放置“\u cww.sed”
char str_new[str_end-str_start+1];//定义新数组
strncpy(str_new,str_start,str_end-str_start);//复制start和and之间的元素位
str_new[str_end-str_start]='\0';//用空字符终止新数组
puts(str_new);//打印新数组
返回0;
}

Sbc_cww.sed之前的字符是否始终保持不变?1)查找最后一个“/”2)查找之后的“_cww.sed”。3) 使用介于1和2之间的字符作为复制所需字符串的源。请查看strtok函数。下划线位置是否清晰?@Sevauk:Bad advice IMO(strtok很难看,需要修改源字符串)。最好是strchr()或strrchr()加上strstrstr()或memmem()(这是gnu扩展),这很好,但我认为他需要使用
strstr(str,“\u cww.sed”),因为
`可能也存在于其他地方,strncpy()是错误的(它假设值[]被初始化为零(不是零)和/或“\u cww.sed”要后跟NUL字符(不一定如此),也没有检查pch1和pch2是否为NULL(或pch2#include<stdio.h> #include<string.h> int main(){ char str[] = "/export/aibn84_2/SED/Sbc_cww.sed"; // define the full array char *str_start = strrchr(str, '/')+1; // locat the first character after the last '/' char *str_end = strstr(str_start, "_cww.sed"); // locat "_cww.sed" after the last '/' char str_new[str_end-str_start+1]; // define the new array strncpy(str_new, str_start, str_end-str_start); // copy the elements bitween the start and the and str_new[str_end-str_start] = '\0'; // terminate the new array with the null character puts(str_new); // print the new array return 0; }