c-堆栈字符串上strtok_r的分段错误



在下面的代码中,我在strtok_r中遇到了一个分段错误,我花了几个小时试图找出原因。其他页面上的答案说你不能修改字符串文字,但(据我所知(我不是。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char req[256];
//char* req = malloc(256 * sizeof(char));
strcpy(req, "hellornversion 1.0rnrn");
char** lineSavePtr;
char* line = strtok_r(req, "rn", lineSavePtr);
}

如果我将req的声明切换到动态声明,它就工作了。如果我使用strtok而不是strtok_r,它也会起作用,所以我猜它可能与lineSavePtr有关?

非常感谢你的回答。

来自文档:

saveptr参数是指向char *变量的指针,该变量由strtok_r()内部使用,以便在解析同一字符串的连续调用之间维护上下文。

您提供了一个未初始化的指针,而不是指向char *变量的指针。当它试图取消引用指针时,会发生未定义的行为。

将变量声明为char *,并使用&传递指向该变量的指针。

int main() {
char req[256];
//char* req = malloc(256 * sizeof(char));
strcpy(req, "hellornversion 1.0rnrn");
char* lineSavePtr;
char* line = strtok_r(req, "rn", &lineSavePtr);
}

相关内容

  • 没有找到相关文章

最新更新