gpt4 book ai didi

c - 使用 malloc 分割字符串时出现段错误

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

我正在使用 ncurses 创建我自己的终端。我获取字符串并将其保存在二维数组 buffer[80][256] 中。我使用 getstr(buffer[i]) 获取字符串。然后我在主函数中有以下内容;

while (strcmp(buffer[i],"exit")!=0) {
strcpy(command,buffer[i]);
printw("%s\n",command);

//calls the function commands found in another source file
commands(buffer[i]);
mvwin(childwin, y, x);
wnoutrefresh(childwin);
i++;
printw("%s",prompt);
getstr(buffer[i]);
doupdate();
}

//source file where one finds commands;
//global array
char*final[40];

void commands (char input[]){
char **buffer =split(input);

...
}

//creating segmentation fault
char **split(char input[]){
char *ptr;
int i=0;

ptr = strtok(input," ");

while(split != NULL){
final[i] = malloc(strlen(ptr)+1);
strcpy(final[i],ptr);
ptr = strtok(NULL," ");
i++;
}
return final;
}

上面的函数是做什么的;它接收用户 buffer[i] 的输入,并将字符串划分为函数命令中数组缓冲区内的单独元素。例如如果用户输入 print hello my name is,则将函数命令中的 buffer 保留;缓冲区[0] = 打印,缓冲区[1] = 你好缓冲区[2] = 我的....

从我的测试看来,malloc 是导致此问题的原因,但我不知道如何解决它。

提前非常感谢您。

最佳答案

 while(split != NULL){

您需要检查 ptr 是否为 NULL,而不是检查 split 是否为 NULL

如果它是NULL,那么你的malloc将分配1字节,内存的取消引用将因溢出而导致问题。

关于c - 使用 malloc 分割字符串时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43661545/

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