[英]copy char before /after special operator in c
我有一个格式为“ xxx / yyy”的值,我使用以下方法提取了“ /”之前和之后的两个值
char * ptr = "xxx/yyy";
part2 = strchr( ptr, '/');
if ( part2 != NULL)
part2++;
part1 = strtok(ptr,"/");
结果:part1 = xxx part2 = yyy
这工作正常,但是当我的ptr值像“ / yyy”时,我的结果是
***part1 = yyy !!!!!! IT should be an empty char!!!!***
part2 = yyy
提前致谢
strtok函数将跳过您在第二个字符串中传递的所有字符。 因此,您得到的第一个字符串在第一次调用时不包含这些字符。 当您需要其他行为时,应考虑实现my_strtok()
。
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
void main(void)
{
char *a=malloc(strlen(ptr)/2);
char *b=malloc(strlen(ptr)/2);
int i=0;j=0,w;
while(*(ptr+i)!='/') {
*(a+j)=*(ptr+i);
j++; i++;
}
*(a+j)='\0';
j=0;
for(w=i+1;w<=strlen(ptr);w++) {
*(b+j)=*(ptr+w);
j++;
}
printf("pure string : %s \ntoken1 : %s \ntoken2= %s", ptr, a, b);
free(a);
free(b);
}
Harper已经为您提供了使用strtok
观察到的行为的解释。 幸运的是,您已经完成了strtok
针对您的情况所做的工作:您已经找到了斜线的位置。 如果存在斜杠,则可以执行strtok
操作:通过覆盖斜杠将第一个字符串终止为零:
int main()
{
char ptr[] = "xxx/yyy";
char *part1, *part2;
part1 = ptr;
part2 = strchr(ptr, '/');
if (part2 != NULL) *part2++ = '\0';
printf("'%s', '%s'\n", part1, part2);
return 0;
}
请注意,输入字符串必须是可修改的,而字符串文字则不能。 (它恰好在您的平台上是可修改的,但是您不应该依赖它;使用char数组ptr[]
代替指向字符串文字*ptr
的指针。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.