gpt4 book ai didi

C - 我不断收到 strtok() 的段错误

转载 作者:行者123 更新时间:2023-11-30 14:58:40 25 4
gpt4 key购买 nike

我想创建一个函数,它接受一个 char *,用 strtok() 对其进行标记,并返回一个包含所有参数的 char ** 。每次尝试执行时,我都会收到段错误错误。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>



#define LENGTH 10

char ** boom(char * line, int * lng){
size_t size = strlen(line )+1;
int tksize = *lng;
const char d[2] = " ";
char a[size];
memcpy(a, line , size);

char ** tk = (char**) malloc(tksize*sizeof(char*));
int i=0;
char* token = strtok(a, d);
while(token!=NULL){
tk[i] = token;
i++;
token = strtok(NULL, d);
}
return tk;
}

int main(void){

int i, lng = LENGTH;
char * string = "this is a beutiful message.\0";
char ** tk = boom(string , &lng);

for (i=0; i<lng; i++){
printf("%s\n", tk[i]);
}

return 0;
}

我需要boom()的返回类型为char**,所以我没有使用char * []的返回类型。我怀疑这是 char** malloc 的问题。感谢您的帮助。

最佳答案

您让 strtok 对局部变量 char a[size] 进行操作,因此 char* token = strtok(a, d) 将指向到堆栈上分配的内存中。一旦函数 boom 完成,该内存将不再有效,这就是段错误的原因。

关于C - 我不断收到 strtok() 的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43241399/

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