gpt4 book ai didi

c - 将 strtok 存储在数组中 ~ C

转载 作者:行者123 更新时间:2023-12-05 09:28:30 27 4
gpt4 key购买 nike

我从老师那里得到了 parseInput 函数。如果没有段错误,我无法让它运行,我希望你们能帮助我。

我认为这与我通过 total_cmd_words 的方式有关,但我不确定。

// Libraries
#include <stdio.h>
#include <string.h>

int parseInput(char *input, char* splitWords[]){
int wordInd = 0;
splitWords[0] = strtok(input, " "); // VSCODE says this line is causing the fault
while(splitWords[wordInd] != NULL){
splitWords[++wordInd] = strtok(NULL, " ");
}

return wordInd;
}

int main(){

char* total_cmd = "file1 > file2";
char* total_cmd_words[] = {};

parseInput(total_cmd, total_cmd_words);

}

gdb 给出了这个输出:

__GI___strtok_r (s=0x555555556006 "file1 > file2", delim=0x555555556004 " ", 
save_ptr=0x7ffff7fb0ca8 <olds>) at strtok_r.c:72
72 strtok_r.c: No such file or directory.

改变:char* total_cmd_words[] = {};对此:char* total_cmd_words[100] = {};仍然会导致段错误。

最佳答案

main 函数中有两个错误。

首先,您对 total_cmd_words 的声明是错误的:就目前而言,您声明的是一个零长度数组——因此没有空间来实际存储 strtok 返回的指针 函数在你的 parseInput 函数中。您需要为 [] 中的数组指定一个维度——一个足够大的维度来容纳您可能遇到的最大数量的值。

其次,调用 strtok 修改作为其第一个参数给出的字符串。但是,您的 total_cmd 是指向 non-mutable 字符串文字的指针。相反,将其声明为 char数组,并使用字符串文字的副本 对其进行初始化。

这是您的 main 的一个可能的工作版本:

int main()
{
char total_cmd[] = "file1 > file2";
char* total_cmd_words[10] = {0,};
int p = parseInput(total_cmd, total_cmd_words);
printf("%d\n", p);
}

关于c - 将 strtok 存储在数组中 ~ C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71281267/

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