繁体   English   中英

在c中的特殊运算符之前/之后复制char

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM