gpt4 book ai didi

c - 使用 strt_ok 后释放变量时出现段错误

转载 作者:行者123 更新时间:2023-12-04 10:16:01 25 4
gpt4 key购买 nike

我在执行这个简单的程序时遇到了段错误(它只是一个重现错误的轻量级版本)。

//   gcc main.c -Wall -Wextra -Wpedantic
// ./a.out

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h> // uint32_t

int main(){

char* rest = (char*)malloc(128 * sizeof(char));
char* token= (char*)malloc(128 * sizeof(char));
strcpy(rest,"Something_else");
token = strtok_r(rest, "_", &rest);
printf("%s\n", token);
free(token);
free(rest);
return 0;
}

变量tokenfree 没有给出任何错误。每次我使用函数 strok_r 时,变量 restfree 总是给我一个段错误。到底是怎么回事?有什么建议吗?编译时不提示警告。

问题:

如何正确地重写这段简单的代码?

最佳答案

你只需要内存这句话,tokenrest只是指针。

然后使用 while 循环,您可以看到所有标记:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h> // uint32_t

int main(){

char* rest , *token;
char* setence= malloc(128 * sizeof(char));

strcpy(setence, "Some_thing_else");

token = strtok_r(setence, "_", &rest);

while (token)
{
printf("%s\n", token);
token = strtok_r(NULL, "_", &rest);
}

free(setence);

return 0;
}

将给予:

Some
thing
else

关于c - 使用 strt_ok 后释放变量时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56769283/

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