Problem beim Compilieren.
-
Hi,
ich habe ein Programm geschrieben und erhalte beim compilieren einen Fehler. Hier der Fehlercode:
function.c: In function
get_data': function.c:57: warning: comparison between pointer and integer function.c:62: warning: passing arg 3 of
add_element' makes pointer from integer without a cast#include "tele.h" #include <stdio.h> #include <stdlib.h> #include <string.h> TELE *anfang=NULL; TELE *ende=NULL; TELE *create_list_element(TELE *ptr) { if((ptr=(TELE *)malloc(sizeof(TELE)))==NULL){ fprintf(stderr,"Fehler bei der speicherreservierung!\n"); exit; } return ptr; } void add_element(long int t_index,long int t_number,char *t_name) { TELE *zeiger; if(anfang==NULL){ anfang=create_list_element(anfang); anfang->index=t_index; anfang->number=t_number; strcpy((anfang->name), t_name);//anfang->name=t_name[]; anfang->next=NULL; anfang->prev=NULL; } else{ zeiger=anfang; while(zeiger->next!=NULL) { zeiger=zeiger->next; } ende=create_list_element(zeiger); zeiger->next=ende; ende->index=t_index; ende->number=t_number; strcpy((anfang->name), t_name);//ende->name=t_name[]; ende->next=NULL; ende->prev=zeiger; } return; } void get_data() { char *line, *a, *b; long int temp_index, temp_number; if((line=(char *)malloc(sizeof(80)))==NULL){ fprintf(stderr,"Fehler bei der speicherreservierung!\n"); exit; } while((fgets(line, 80,stdin))!=EOF) { temp_index=strtol(line, &a, 10); temp_number=strtol(a, &b, 10); add_element(temp_index,temp_number, *b); } return; }
Kann mir da einer helfen? Das Programm habe ich gesplitet in eine main.c, function.c tele.h.
-
if((line=(char *)malloc(sizeof(80)))==NULL){
bist du dir darüber bewusst, was sizeof(80) für einen Wert hat? Ich sag nur so viel, es ist nicht 80
while((fgets(line, 80,stdin))!=EOF)
schau dir mal den Rückgabewert von man: fgets(3) an und von welchem Typ EOF ist
add_element(temp_index,temp_number, *b);
warum dereferenzierst du b, wenn du einen pointer übergeben sollst?
-
Hi,
bei sizeof(80) habe ich jetzt keine Ahnung was ich sachreiben soll dürften doch dann platz schafen für 80 zeichen oder?
und das EOF habe ich nun auf NULL abgeändert.
Mein Problem liegt aber immernoch das ich nicht weiß wie ich b in eine verkettete liste übertragen soll. deswegen der Pointer b ist ausserdem ein Pointer wieso darf ich dann kein * dranhängen?
-
@olimlad
sizeof(80) != 80. Das hat dir schon kingruedi gesagt. Schau mal in deiner Doku oder einem C-Buch, dass du hoffentlich hast, nach, was sizeof() zurückgibt und welchen "Parameter" sizeof() erwartet.Wegen dem Zeiger solltest du besser auch nochmal genauer nachlesen, besonders wie man Zeiger verwendet.
-
olimlad schrieb:
bei sizeof(80) habe ich jetzt keine Ahnung was ich sachreiben soll dürften doch dann platz schafen für 80 zeichen oder?
80 ist ein int
somit ist sizeof(80) == sizeof(int)
willst du vielleicht nur 80?Ich glaube du solltest das nochmal in deinem Buch nachlesen.
Mein Problem liegt aber immernoch das ich nicht weiß wie ich b in eine verkettete liste übertragen soll. deswegen der Pointer b ist ausserdem ein Pointer wieso darf ich dann kein * dranhängen?
Auch hier solltest du nochmal nachlesen.
wenn p ein Zeiger ist, so ist *p der Wert auf den p zeigt.