[英]Tokenize a c string
我正在尝试获取/ xxx /之后的字符串thet,必须有一个正斜杠,其中两个,然后是我需要提取的字符串。 这是我的代码,但是我不知道在哪里设置空终止符,这里有一个数学问题
char str[100] = "/709/usr/datapoint/nviTemp1";
char *tmp;
char token[100];
tmp = strchr(str+1, '/');
size_t len = (size_t)(tmp-str)+1;
strncpy(token, str+len, strlen(str+len));
strcat(token,"\0");
我想提取/709/
之后的任何内容,它是usr/datapoint/nviTemp1
请注意,/ 709 /是可变的,并且可以是任何大小,但可以肯定会有两个正斜杠。
如果您确定字符串以`“ / NNN /”开头,那么很简单:
char str[100] = "/709/usr/datapoint/nviTemp1";
char token[100];
strcpy(token, str+5); // str+5 is the first char after the second slash.
如果您需要在第二个斜杠之后获取所有内容,请执行以下操作:
char str[100] = "/709/usr/datapoint/nviTemp1";
char token[100];
char* slash;
slash = strchr(str, '/'); // Expect that slash == str
slash = strchr(slash+1, '/'); // slash is second slash.
strcpy(token, slash+1); // slash+1 is the string after the second slash.
简单改进:
char str[100] = "/709/usr/datapoint/nviTemp1";
char *tmp;
char token[100];
tmp = strchr(str+1, '/');
if (tmp != NULL) strncpy(token, tmp + 1, sizeof(token)); else token[0] = '\0';
tmp
将斜线指向"/709"
,因此您想要的就是紧随其后的内容。 您不必手动计算长度。
此外, strncpy
最多复制(第三个参数)字符,因此它应该是目标缓冲区的长度。
您可以使用计数器和基本的while循环:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
if (argc < 2) return 0;
char *s = argv[1];
char slash = '/';
int slash_count = 0;
while (slash_count < 2 && *s)
if (*s++ == slash) slash_count++;
printf("String: %s\n", s);
return 0;
}
然后,您可以使用s
指针做任何您想做的事情,例如用strdup
复制它或使用strcat
, strcpy
等。
输出:
$ ./draft /709/usr/datapoint/nviTemp1
String: usr/datapoint/nviTemp1
$ ./draft /70905/usr/datapoint/nviTemp1
String: usr/datapoint/nviTemp1
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.