Я немного не знаком с моим программированием на С, и я уверен, что это что-то простое, что я собираюсь ударить себя на потом, но я не могу понять это. Я не хочу, чтобы получить возможность отправлять слишком много коды, но вот то, что релевантно:C Сегментация Fault structs/pointers
#define MAX_COMMAND_ARGS 9
#define MAX_COMMAND_SIZE 80
typedef struct
{
int argc;
char* argv[MAX_COMMAND_ARGS + 1];
char* history[MAX_COMMAND_SIZE+1];
size_t size;
} Command;
void History(const Command* cmd)
{
for (size_t i = 0; i < cmd->size-1; ++i)
{
printf("%s\n", cmd->history[i]);
}
}
И эта линия, которая существует внутри другой функции, как вводятся команды:
command->history[command->size] = command->argv[0];
++(*command).size;
Я пытаюсь реализовать простая команда истории, но каждый раз, когда я вызываю функцию History, я получаю seg-ошибку. Любая помощь будет оценена по достоинству.
Редактировать: я исправил проблему с форматом, я возился с линией printf. Это линия, где я получаю ошибку сегм:
printf("%s\n", cmd->history[i]);
Ну, вы не говорите нам, какая строка бросает исключение, и не показывает какой-либо код, который вызывает History(). У вас, скорее всего, есть нулевой указатель или переполнение буфера. Вот почему существуют отладчики. Положите, как использовать его. Это будет ваш лучший друг. Кроме того, вы пытаетесь напечатать две строки в вашем printf и имеете только один параметр. Может быть, проблема. – OldProgrammer
скомпилируйте ваше программное обеспечение с помощью '-Wall' и прочитайте предупреждения. –
Вы получаете ошибку seg на первой итерации? –