2017-05-18 4 views
-2
#include <stdio.h> 

void add_element(char object[20], int price); 

struct linked_list { 
    char object[20]; 
    int price; 
    struct shopping_list *next; 
}; 

struct linked_list list = {"car", 15000, NULL}; 
struct linked_list *last = &list; 

int main() { 
    add_element("snake", 340); 
    printf("%s", list.object); 
    return 0; 
} 

void add_element(char object[20], int price) { 
    struct linked_list new_element = {object, price, NULL}; 


} 

ERROR:C Initialisierung macht Ganzzahl von Zeiger

warning: initialization makes integer from pointer without a cast [enabled by default]

struct linked_list new_element = {object, price, NULL}; 

wenn ich pass "Schlange" direkt funktioniert es LINKED_LIST new_element auf struct, aber Objekt übergeben nicht.

+0

Sie wissen, dass Sie dem Funktionsaufruf falsche Versprechungen machen, richtig? –

+1

Ändern Sie es in 'struct linked_list new_element = {" ", price, NULL}; strcpy (neues_element.objekt, objekt); ' – BLUEPIXY

Antwort

4

Sie versuchen, ein Array mit einem Zeiger zu initialisieren. Dies versucht, den Zeiger in eine char umzuwandeln und das erste Element damit zu initialisieren, daher der Fehler .

sollte Dieses Fragment wie folgt aussehen: wegen der Nicht-Standard-Erweiterungen

struct linked_list new_element = { .price = price }; 
memcpy(new_element.object, object, sizeof new_element.object); 

1- Dies sollte einen Fehler sein, scheint aber nur eine Warnung zu erzeugen. Sowohl GCC als auch Clang akzeptieren -Wall -Wextra -Wfatal-errors -pedantic-errors als eine ziemlich robuste Flagge, die gesetzt wird, um diese zu erfassen.

Verwandte Themen