【问题标题】:strtok doesn't work with non-const char argumentstrtok 不适用于非 const char 参数
【发布时间】:2016-11-07 19:04:23
【问题描述】:

我有这个功能,可以取一个句子并反转每个单词。 我必须就地修改值,返回值应该为 Null。 我不能修改主要的:

int main()
{
    char *string= "hello";
    reverser(string);
    printf("%s\n", string);
}

在我的reverser 函数中,我使用strtok,这需要non-const char*

char* reverser(char *sentence) {
    char *copy = strdup(sentence);
    char *string;
    int i, j;

    for(j = 0; (string = strtok(j ? NULL : copy, " ")) != NULL; j++)
        for(i = strlen(string) - 1; i >= 0; --i, j++)
            sentence[j] = string[i];
    return NULL;
}

即使使用 strdup 也不起作用,我不知道为什么... 有人有什么建议让它工作吗? 谢谢你

【问题讨论】:

  • 您知道strdup 已经将sentence 的内容复制到copy 的缓冲区吗?
  • Sentence 指向一个字符串字面量。不得修改。
  • 顺便说一句,你总是从reserver返回NULL。甚至没有看你的 for 循环,但这些应该已经是你应该修复的一些错误。
  • "strtok 不适用于非 const char 参数" --> strtok() 工作正常。尝试修改 "hello" 是不行的。尝试char string[] = "hello"; 并在完成后释放您分配的数据。
  • 如果你不能修改那个主代码,你的任务是不可能的(没有作弊)。

标签: c strtok char-pointer


【解决方案1】:

char *string= "hello"; 替换为char string[] = "hello";

否则string 将无法修改,并且逆向函数将不可能工作。 (假设它总是返回 NULL)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多