【发布时间】:2023-04-04 20:05:01
【问题描述】:
我正在尝试使用结构和文件制作程序。以下只是我的代码的一部分(它不是整个程序)。 我想要做的是:要求用户编写他的命令。例如。删除约翰 例如。输入 John James 5000 ipad 购买。
问题是我想拆分命令以便将其“args”保存为结构元素。这就是我使用 strtok 的原因。但是我面临另一个问题,谁将这些“放在”结构上。 此外,如何以安全的方式将“args”“传递”到结构对我来说似乎很奇怪,因为我将所有输入(来自用户)保存在一个二进制文件中,该文件可能会被重新打开和重写,所以我不能使用:
strcpy(catalog[0]->short_name, args[1]);
因为是时候将短名称保存在结构的第一个元素中了。但是如果文件被写入了,那会发生什么呢?第一个元素存在,所以如果我写 ..[0]我会写吗? 我该怎么办?提前感谢您的帮助! :D
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
char command[1500];
struct catalogue
{
char short_name[50];
char surname[50];
signed int amount;
char description[1000];
}*catalog[MAX];
int main ( int argc, char *argv[] )
{
int i,n;
char choice[3];
printf(">sort1: Print savings sorted by surname\n");
printf(">sort2: Print savings sorted by amount\n");
printf(">search+name:Print savings of each name searched\n");
printf(">delete+full_name+amount: Erase saving\n");
printf(">enter+full_name+amount+description: Enter saving \n");
printf(">quit: Update + EXIT program.\n");
printf("Choose your selection:\n>");
gets(command); //it save the whole command
/*in choice it;s saved only the first 2 letters(needed for menu choice again)*/
strncpy(choice,command,2);
choice[2]='\0';
char** args = (char**)malloc(strlen(command)*sizeof(char*));
memset(args, 0, sizeof(char*)*strlen(command));
char* temp = strtok(command, " \t");
for (n = 0; temp != NULL; ++n)
{
args[n] = strdup(temp);
temp = strtok(NULL, " \t");
printf(" %s ",args[n]);
}
strcpy(catalog[0]->short_name, args[1]); //segmentation fault
strcpy(catalog[0]->surname,args[2]);
catalog[0]->amount=atoi(args[3]); //atoi doesn't work
strcpy(catalog[0]->description,args[4]);
}
结果,运行程序后我得到一个分段错误... 换行:
strcpy(catalog[0]->short_name, args[1]);
有什么帮助吗?有什么想法吗?
【问题讨论】:
-
我不是C程序员,但是关于你的问题标题,有些人不喜欢说“help plz”的人:meta.stackexchange.com/questions/48024/…
标签: c struct command-line-arguments strtok