[英]Segmentation fault in strtok_r on stack string
I'm getting a segmentation fault in strtok_r
in the following piece of code and I've spent a few hours trying to figure out why.在下面的一段代码中,我在
strtok_r
中遇到了分段错误,我花了几个小时试图找出原因。 Answers on other pages say you can't modify a string literal, but (as far as I know) I'm not.其他页面上的答案说您不能修改字符串文字,但是(据我所知)我不是。
#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);
}
If I switch the declaration of req
to the dynamic one, it works.如果我将
req
的声明切换为动态声明,它就可以工作。 It also works if I use strtok
instead of strtok_r
, so I'm guessing it might have something to do with lineSavePtr
?如果我使用
strtok
而不是strtok_r
它也有效,所以我猜它可能与lineSavePtr
?
Thanks a lot for any answers.非常感谢任何答案。
From the documentation :从文档中:
The
saveptr
argument is a pointer to achar *
variable that is used internally by strtok_r()
in order to maintain context between successive calls that parse the same string.saveptr
参数是一个指向char *
变量的指针,该变量由 strtok_r()
内部使用,以维护解析相同字符串的连续调用之间的上下文。
You've provided an uninitialized pointer, not a pointer to a char *
variable.您提供了一个未初始化的指针,而不是指向
char *
变量的指针。 When it tries to dereference the pointer, undefined behavior occurs.当它试图取消引用指针时,会发生未定义的行为。
Declare the variable as char *
, and pass a pointer to the variable using &
.将变量声明为
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.