堆栈字符串 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
?
有关
非常感谢您的回答。
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);
}
我在以下代码的 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
?
非常感谢您的回答。
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.
您提供了一个未初始化的指针,而不是指向 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);
}