Ich schreibe gerade ein Programm mit dem ich Notizen in der Konsole anzeigen und erstellen kann an sich nichts weltbewegendes, dennoch habe ich einen kleinen Fehler bei dem ich einfach nicht weiter komme. Ich will an eine Funktion ein char array übergeben das nach einem bestimmten Muster überprüft ob in dem Array bestimmte Zeichenketten existieren. Das Programm wird mit ein paar Warnungen kompiliert, aber wenn ich es ausführe kommt die Meldung Speicherzugriffsfehler. Ich hoffe ihr könnt mir weiter helfen.
Code: Alles auswählen
note_maker.c: In function ‘main’:
note_maker.c:47: warning: passing argument 1 of ‘getline’ from incompatible pointer type
note_maker.c: In function ‘check_trigger’:
note_maker.c:89: warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast
note_maker.c:93: warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast
note_maker.c:97: warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast
note_maker.c:101: warning: passing argument 2 of ‘strcmp’ makes pointer from integer without a cast
Code: Alles auswählen
/*------------- Programm um Notizen zu speichern -----------*/
//-------------------------------------------------------------------------------
// Das Programm bietet vier Funktionen um mit den Notizen zu arbeiten.
// 1. Lese Funktion bei dem Trigger -r werden die ganzen Notizen angezeigt.
// 2. Schreibe Funktion bei dem Trigger -w wird die angegebene Notiz gespeichert.
// 3. Lösche Funktion bei dem Trigger -d wird die angegebene Notiz gelöscht.
// 4. Hilfe Funktion bei dem Trigger -h wird eine Übersicht sämtlicher Funktionen angezeigt.
#define _GNU_SOURCE
#include <stdlib.h>
#include <stdio.h>
#include <readline/readline.h>
#define FILE_NAME "/home/crap/.note_maker_save"
#define FILE_NAME_BACKUP "/home/crap/.note_macker_save_backup"
int check_trigger(int argc, char *argv);
void show_help();
void check_file();
int main(int argc, char *argv[])
{
/* Deklaration der einzelnen Variablen */
int trigger, counter = 1;
const char var[] = "Notiz ";
const char *buffer = NULL;
const char *text_input;
size_t length = 0;
ssize_t text_output;
/* Sicherheitsprüfung */
trigger = check_trigger(argc, argv[1]);
check_file();
/* Hauptteil des Programms */
if((argc > 0) || (argc < 2))
{
FILE *file_deskriptor;
switch(trigger)
{
case 1:
/* ANZEIGEN der Notizen */
file_deskriptor = fopen(FILE_NAME, "r");
while(feof(file_deskriptor) == 0)
{
text_output = getline(&buffer, &length, file_deskriptor);
fprintf(stdout, "\n%d Notiz: %s", counter, text_output);
counter++;
}
break;
case 2:
/* SCHREIBEN der Notizen */
file_deskriptor = fopen(FILE_NAME, "a");
text_input = readline("\nNotiz:\t");
fputs(text_input, file_deskriptor);
fclose(file_deskriptor);
break;
case 3:
/* LÖSCHEN der Notizen */
break;
case 4:
/* HILFE anzeigen */
show_help();
break;
default:
break;
}
fclose(file_deskriptor);
}
else
{
show_help();
}
return 0;
}
int check_trigger(int argc, char* argv)
{
const char read[] = "-r";
const char write[] = "-w";
const char delete[] = "-d";
const char help[] = "-h";
if(strcmp(read, argv[1]) == 0)
{
return 1;
}
else if(strcmp(write, argv[1]) == 0)
{
return 2;
}
else if(strcmp(delete, argv[1]) == 0)
{
return 3;
}
else if(strcmp(help, argv[1]) == 0)
{
return 4;
}
else
{
return 0;
}
}
void show_help()
{
printf("\n\n\tnote_maker");
printf("\n\t-r\t\t\tAnzeigen der Notizen.");
printf("\n\t-w\t\t\tSpeicher der angegebenen Notiz.");
printf("\n\t-d\t\t\tLöschen der angegebenen Notiz.");
printf("\n\t-h\t\t\tDiesen Hilfetext anzeigen.");
}
void check_file()
{
FILE *var;
/*checke ob FILE_NAME vorhanden ist*/
var = fopen(FILE_NAME, "r");
if(var == NULL)
{
fclose(var);
var = fopen(FILE_NAME, "a");
fclose(var);
}
else
{
fclose(var);
}
/*checke ob FILE_NAME_BACKUP vorhanden ist*/
var = fopen(FILE_NAME_BACKUP, "r");
if(var == NULL)
{
fclose(var);
var = fopen(FILE_NAME_BACKUP, "a");
fclose(var);
}
else
{
fclose(var);
}
}