【问题标题】:strange result from strtokstrtok 的奇怪结果
【发布时间】:2014-04-03 23:36:34
【问题描述】:

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

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

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

【问题讨论】:

  • 你没有调试器吗?
  • 什么是crack_word_countcrack_lines 是什么? crack_lines[0] 是否指向字符串常量? (您向我们展示的代码的含义取决于我们看不到的代码。)
  • 发布一个完整的、可编译的示例程序。这样我们就不必猜测crack_lines 的类型或crack_word_count 是什么。

标签: c token


【解决方案1】:

来自documentation of strtok

这个函数是破坏性的:它在 字符串 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, " ");
    }
}

【讨论】:

  • 你可能是对的。很难说,因为 OP 已经沉默了。但我无法理解这个问题是如何产生他报告的结果的。
  • 我遇到了char* crack_line = "NY'X YNRJ YT UQFD YMJ RZXNH" 的段错误。但我只是猜测这可能是问题......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 2012-12-16
  • 2012-12-06
  • 2016-08-24
相关资源
最近更新 更多