2014-04-03 30 views
-1

我试图将一个字符串拆分为令牌并将它们存储在一个数组中。strtok奇怪的结果

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

什么是'crack_word_count'?什么是'crack_lines'? 'crack_lines [0]'指向一个字符串常量吗? (您向我们展示的代码的含义取决于我们无法看到的代码。) –

+3

发布完整的可编译示例程序。这样我们就不必猜测类似'crack_lines'或'crack_word_count'的类型。 –

回答

1

documentation of strtok

此功能是破坏性的:它在字符串str的 元件写入 '\ 0' 字符。特别是,字符串文字不能是 用作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, " "); 
    } 
} 
+0

你可能是对的。很难说,因为OP的沉默。但是我很难理解这个问题是如何产生他报告的结果的。 –

+0

我用'char * crack_line =“NY'X YNRJ YT UQFD YMJ RZXNH”'得到一个段错误。但我只是猜测这可能是问题... – Danvil