在下面的代码中,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
有关?
非常感谢您提供任何答案。
答案 0 :(得分:1)
saveptr
参数是指向schar *
内部使用的trtok_r()
变量的指针,以维持解析同一字符串的连续调用之间的上下文。
您提供了一个未初始化的指针,而不是指向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);
}