在下面的代码中,我在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);
}