Я пытаюсь создать программу с помощью структур и файлов. Следующее - это лишь часть моего кода (это не вся программа). Что я пытаюсь сделать: попросите пользователя написать его команду. например. удалите John например. войдите в покупку iPad John iPad 5000.Structs, strtok, segmentation fault
Проблема в том, что я хочу разделить эту команду, чтобы сохранить ее «args» для элемента struct. Вот почему я использовал strtok. НО Я столкнулся с другой проблемой, кто должен «поместить» их в структуру. Также мне кажется странным, как безопасно передавать «args» в структуру, поскольку я сохраняю все входящие (от пользователя) в двоичном файле, которые могут быть снова открыты и переписаны, поэтому я не могу использовать:
strcpy(catalog[0]->short_name, args[1]);
Поскольку настало время, краткое имя будет сохранено в первом элементе структуры. Но если файл написан, что происходит тогда? Первый элемент существует, поэтому, если я пишу .. [0] я напишу на нем? Что мне делать? Thanx заранее за любую помощь! : 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]);
}
В результате, после запуска программы я получаю Segmentation Fault ... для линии:
strcpy(catalog[0]->short_name, args[1]);
Любая помощь? Есть идеи?
Я не программист на C, но в отношении вашего названия вопроса некоторые люди не любят людей, говорящих «help plz»: http://meta.stackexchange.com/questions/48024/what-is- up-with-all-always-say-plz-help –
;) okkkk! hehehe thnx Andrew – FILIaS