gpt4 book ai didi

c - 理解C中的scanf()(段错误)

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

我不明白如何在 C 中获取输入。我有以下代码,该代码会产生段错误:

int main(int argc, char *argv[]){
while (fgets(buffer, MAX_LEN + 1, input) != NULL) {
get_command(t, buffer);
}
return 0;
}

static void get_command(Table *t, char *command) {
COMMAND command_name = 0;
char *valid_args_str[] = {"aa","bb"};
int arg_counter = 1;

scanf("%s", command);

if (!strncmp(command, "in", 2)) {
command_name = INSERT;
while(arg_counter){
printf("whileloop reached, arg_counter is %d", arg_counter);
scanf("%s", valid_args_str[arg_counter - 1]);
}
.
.
.
}

在出现段错误之前,打印语句甚至没有被评估。这是怎么回事?

while (fgets(buffer, MAX_LEN + 1, input) != NULL)在做什么?scanf() 在做什么?我可以让一个 scanf() 跟随另一个吗?我希望参数位于同一行。

谢谢!

更新:

这是更新的代码。还是同样的问题。希望这将是一个更完整的剪辑:

typedef enum { INSERT = 1, SEARCH, DELETE, RESET, DISPLAY} COMMAND;

static void get_command(Table *t, char *command) {
COMMAND command_name = 0;
char valid_args_str[] = {"aa","bb"};
int arg_counter = 0;
char other_buffer[MAX_LEN + 1];

sscanf(command, "%s", other_buffer);

if (!strncmp(other_buffer, "in", 2)) {
command_name = INSERT;
while(++arg_counter){
printf("whileloop reached, arg_counter - 1 is %d\n", arg_counter - 1);
scanf("%s", valid_args_str[arg_counter - 1]);
}
} else if (!strncmp(other_buffer, "se", 2)) {
.
.
.
execute_comm(t, command_name, valid_args_str);
}

static void execute_comm(Table *t, COMMAND command, char *args[]){
switch(command){
case INSERT:
insert(t, args[0], args[1]);
break;
.
.
}

这是我的主要内容:

int main(int argc, char *argv[]){

FILE *input;
char buffer[MAX_LEN + 1];
input = stdin;
if(argc > 2){
fprintf(stderr, "%s", "Too many arguments");
perror("Too many arguments");
exit(EX_OSERR);
} else if (argc == 2){
if ((input = fopen(argv[1], "r")) == NULL) {
fprintf(stderr, "%s", "error opening files");
perror("error opening file");
exit(EXIT_FAILURE);
}
}

while (fgets(buffer, MAX_LEN + 1, input) != NULL) {
get_command(t, buffer);
}
fclose(input);
return 0;
}

我想要发生的是它能够读取这样的文件:

插入利马 bean

删除bean

等等。和来自标准输入。有些命令有两个参数,有些只有一个,有些则没有。

再次感谢

最佳答案

我怀疑您的buffer变量未分配。你这样声明吗?

char* 缓冲区;

如果是这样,这就是您出现段错误的原因。

您需要为缓冲区分配内存。

字符缓冲区[1024];

关于c - 理解C中的scanf()(段错误),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3834732/

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