incompatible types in assignment

Dieses Thema im Forum "C/C++" wurde erstellt von musiKk, 24.01.2007.

  1. musiKk

    musiKk Dr. Strangelove

    Dabei seit:
    30.07.2006
    Beiträge:
    264
    Zustimmungen:
    0
    Ort:
    Leipzig
    Hallo, ich bins mal wieder. :/

    Ich versuch mal das Umfeld um die Frage so weit zu straffen, wie es geht:

    Ich habe folgende Strukturen:

    Code:
    struct satztyp {
    	char name[20];
    	char vorname[20];
    	char anschrift[50];
    	char telefon[20];
    };
    
    struct index {
    	char name[20];
    	long position;
    };
    
    Um folgende Funktion dreht es sich (erst Prototyp, dann die Funktion bei der Deklaration):

    Code:
    struct indexElement* add(char*, long, struct indexElement*);
    
    struct indexElement* add(char* name, long bytePos, struct indexElement* start) {
    	struct index *newIndex;
    	newIndex=(struct index*) malloc (sizeof(struct index));
    	[COLOR="Red"]newIndex->name=name;[/COLOR]
    	newIndex->position=bytePos;
    
    Aufgerufen wird die Funktion:

    Code:
    struct satztyp temp;
    	struct indexElement *start=NULL;
    	while(fread(&temp, sizeof(struct satztyp), 1, fp)) {
    		char* name=temp.name;
    		start=add(name, ftell(fp), start);
    
    Fuer die rot markierte Zeile schreit mich der Compiler an: incompatible types in assignment.

    Warum? newIndex->name ist vom Typ char*, name ist vom Typ char*. Habe schon Trial and Error like (mir rennt die Zeit davon, wuerde ich ueber alles nachdenken, was ich tu, wuerd ich gar nix mehr schaffen) alle moeglichen Kombinationen von * und & ohne Erfolg ausprobiert.

    Waere sehr nett, wenn mir jemand auf die Spruenge helfen koennte. :(
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 SkydiverBS, 24.01.2007
    SkydiverBS

    SkydiverBS Tripel-As

    Dabei seit:
    15.01.2005
    Beiträge:
    207
    Zustimmungen:
    0
    Ort:
    Freising
    Hallo!

    Ich bin auch nicht ganz fit auf dem Gebiet der Zeiger und hab vor nicht allzulanger Zeit auch einfach alle Möglichkeiten von * und & durchprobiert. Das man damit oft nicht weiterkommt ist klar. Mir hat die Lektüre des Buches "The C Programming Language" von Kernighan und Ritchie sehr dabei geholfen nicht mehr planlos alles durchzuprobieren. Das nur am Rande.

    Jetzt zu deinem Problem:
    Schauen wir uns einfach mal die zwei Zeilen in deinem Code an und ich versuche dir daran zu erklären was falsch läuft.
    Code:
    char* name=temp.name;
    Nach dieser Zeile, weißt der Pointer name auf die Adresse des Arrays temp.name.
    Code:
    newIndex->name=name;
    Was du hier versuchst ist: einem "statischem" char-Array (das schon eine Adresse hat da durch "char name[20]" ein Speicherbereich reserviert wurde) eine andere Adresse unterzuschieben.
    Was du willst ist: das Array auf das der Pointer name zeigt in das Array newIndex->name kopieren.
    Die einfachste Möglichkeit dies zu erreichen wäre eine Funktion wie strcpy oder sprintf zu verwenden. z.B.:
    Code:
    strcpy(newIndex->name, name);
    Ich hoffe das hilft dir weiter!

    Falls ich Fehler bei der Beschreibung gemacht habe korrigiert mich bitte.

    Gruß,
    Philip
     
  4. musiKk

    musiKk Dr. Strangelove

    Dabei seit:
    30.07.2006
    Beiträge:
    264
    Zustimmungen:
    0
    Ort:
    Leipzig
    Ja, vielen Dank. Heute frueh ist es mir auch aufgefallen. Da der Speicher vorher schon mit einem 20 Byte langen Array belegt ist, kann ich da nicht einfach was zuweisen. Den String zu kopieren war auch meine Idee, werde ich gleich machen.
    War wohl zu unkonzentriert gestern, bald sind Pruefungen, es wird langsam stressig.

    Aber vielen Dank fuer die Antwort. :)
     
  5. #4 paule72, 26.01.2007
    paule72

    paule72 Jungspund

    Dabei seit:
    21.01.2007
    Beiträge:
    19
    Zustimmungen:
    0
    Nimm strncpy! Damit kannst Du sicherstellen, dass Du nicht durch einen zu langen String anderen Speicher überschreibst.
     
  6. musiKk

    musiKk Dr. Strangelove

    Dabei seit:
    30.07.2006
    Beiträge:
    264
    Zustimmungen:
    0
    Ort:
    Leipzig
    strcpy sollte es in diesem Fall auch tun, da beide Zeichenketten maximal 20 Zeichen lang sein koennen (bzw 19 wegen \0).
    Habe das Programm heut auch schon vorgestellt und abhaken lassen. :)
     
Thema:

incompatible types in assignment

Die Seite wird geladen...

incompatible types in assignment - Ähnliche Themen

  1. Werte unterschiedlichen Types aufnehmen.

    Werte unterschiedlichen Types aufnehmen.: Hi, ich möchte gerne Werte mit unterschiedlichen Datentyp, Größe und Anzahl in einem Programm aufnehmen und verarbeiten. Doch ich finde für das...
  2. falsche Mime-Types werden erkannt

    falsche Mime-Types werden erkannt: Hallo, Habe ein Problem mit Mime-Types seit dem letzten Update meines xUbuntus. Seit diesem setzt mein System warlos Mime-Types. Manche PDF's...
  3. Data Types Postgres

    Data Types Postgres: Hallo, ich benötige in meiner Tabelle Zutat eine Spalte in die nur einträge der Form "Fisch", "Fleisch" "vegetarisch" usw. erlaubt wie könnte...