来自strtok的奇怪结果

时间:2014-04-03 23:36:34

标签: c token

我正在尝试将字符串拆分为标记并将它们存储在数组中。

printf("crack_lines[0] : %s\n",crack_lines[0]);
i = 0;
char *encrypted[crack_word_count];
encrypted[i] = strtok(crack_lines[0]," ");
while(encrypted[i] != NULL)
{
    printf("%s\n",encrypted[i]);
    i++;
    encrypted[i] = strtok(NULL, " ");
}

但是当我运行它时输出是:

crack_lines[0] : NY'X YNRJ YT UQFD YMJ RZXNH


1


w
n

我真的不确定为什么打印这个,我想知道是否有人对此有任何想法。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

来自documentation of strtok

  

此功能具有破坏性:它会在中写入'\ 0'字符   字符串str的元素。特别是,字符串文字不能   用作strtok的第一个参数。

这对我有用:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main()
{
    char* crack_line = malloc(128);
    strcpy(crack_line, "NY'X YNRJ YT UQFD YMJ RZXNH");
    const int crack_word_count = 32;
    printf("crack_lines : %s\n", crack_line);
    int i = 0;
    char *encrypted[crack_word_count];
    encrypted[i] = strtok(crack_line," ");
    while(encrypted[i] != NULL)
    {
        printf("%s\n",encrypted[i]);
        i++;
        encrypted[i] = strtok(NULL, " ");
    }
}