1

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

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

1 回答 1

6

的第二个参数strtok()是一个以空字符结尾的字符串 ( char*),但您传递的是单个char. 虽然 a char*,但它不会以 null 终止。改成:

char sep[2] = { SEPRATOR, 0 };

相应地改变当前用途sep

str[count++] = sep[0];

pch = strtok(str, sep);

你可能会发现snprintf()构造你的strmemcpy()调用序列更简单。

另外,如果你想初始化str

char str[1024] = ""; /* instead of performing a memset(). */
于 2012-07-10T17:10:11.937 回答