gpt4 book ai didi

c - 堆栈字符串上 strtok_r 中的段错误

转载 作者:行者123 更新时间:2023-11-30 14:35:01 24 4
gpt4 key购买 nike

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

关于c - 堆栈字符串上 strtok_r 中的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58719432/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com