这里我有一个字符串表示字符数组。此数组也包含分隔符。现在我想只取出没有这个分隔符的字符串。
我正在使用strtok
功能。
我想用这个分隔符分隔我的所有单词。
但是我在这段代码中遇到了一些问题。
请告诉我,如果我做错了或告诉我以不同的方式实现这个简单易行的方法,也要考虑内存风险。
此行pch = strtok (str,&sep);
一无所获。问题只在这里。
代码
/* strtok example */
#include <stdio.h>
#include <string.h>
#define SEPRATOR 0x03
int main ()
{
char str[1024];
int count = 0;
char sep;
memset(str,0,1024);
sep = SEPRATOR;
memcpy(str,"1",strlen("1"));
count = count + strlen("1");
str[count++] = sep;
memcpy(str+count,"0",strlen("0"));
count = count + strlen("0");
str[count++] = sep;
memcpy(str+count,"2",strlen("2"));
count = count + strlen("2");
str[count++] = sep;
memcpy(str+count,"abc_1.0.xyz",strlen("abc_1.0.xyz"));
count = count + strlen("abc_1.0.xyz");
str[count++] = sep;
memcpy(str+count,"3",strlen("3"));
count = count + strlen("3");
str[count++] = sep;
memcpy(str+count,"23455.456",strlen("23455.456"));
count = count + strlen("23455.456");
printf("Input String = %s\n",str);
char * pch;
int pchcount = 0;
pch = strtok (str,&sep);
while (pch != NULL)
{
pchcount++;
printf ("%d === %s\n",pchcount,pch);
pch = strtok (NULL,&sep);
}
return 0;
}
答案 0 :(得分:6)
strtok()
的第二个参数是一个以空字符结尾的字符串(char*
),但是您传递了一个char
的地址。当char*
时,它不会被终止。改为:
char sep[2] = { SEPRATOR, 0 };
相应更改sep
的当前用途:
str[count++] = sep[0];
pch = strtok(str, sep);
您可能会发现构建snprintf()
的{{1}}比str
调用的序列更简单。
另外,如果您想初始化memcpy()
:
str