堆栈字符串 strtok_r 中的分段错误

Segmentation fault in strtok_r on stack string

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

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

int main() {
    char req[256];
    //char* req = malloc(256 * sizeof(char));
    strcpy(req, "hello\r\nversion 1.0\r\n\r\n");
    char** lineSavePtr;
    char* line = strtok_r(req, "\r\n", lineSavePtr);
}

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

有关

非常感谢您的回答。

来自documentation

The saveptr argument is a pointer to a char * variable that is used internally by strtok_r() in order to maintain context between successive calls that parse the same string.

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

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

int main() {
    char req[256];
    //char* req = malloc(256 * sizeof(char));
    strcpy(req, "hello\r\nversion 1.0\r\n\r\n");
    char* lineSavePtr;
    char* line = strtok_r(req, "\r\n", &lineSavePtr);
}