想要使用特定字符将字符串分隔为标记

时间:2012-07-10 17:08:23

标签: c strtok

这里我有一个字符串表示字符数组。此数组也包含分隔符。现在我想只取出没有这个分隔符的字符串。

我正在使用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;
}

1 个答案:

答案 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