Mehrdimensionales Char Zeiger Array

ArcVieh

Grünschnabel
Hallo,

ich habe folgenden Code:
C++:
char * csvarr[4][81];
csvarr[0] = line;

In line steht eine Zeile aus einer Datei, per fgets ausgelesen.


Der Compiler spuckt mir aber folgenden Error aus, den ich nicht weiß zu beheben:
Code:
|69|error: incompatible types when assigning to type 'char *[81]' from type 'char *'|


Kann mir da vielleicht einer weiterhelfen?


Lieben Gruß!
 
Zuletzt bearbeitet von einem Moderator:
Hi

C++:
char * csvarr[4][81];
Bist du dir sicher, dass du nicht
C++:
char csvarr[4][81];
meinst?

Und für Stringzuweisungen funktioniert kein =
weil es genaugenommen ein Array mit vielen Werten ist.
Man könnte das theoretisch mit einer Schleife und = machen,
aber das gibt es schon fertig:
C++:
strcpy(csvarr[0], line);

Gruß
 
Hallo!
Eigentlich wollte ich schon gerne die Referenzen zuweisen.. Aber, bei meinem kompletten Quellcode ist deine Methode eh die bessere Wahl. Danke! :)

Aber ich hab da noch eine andere Frage, falls ich die hier im Thread noch stellen darf:
Ich habe folgenden Quellcode, er auch wunderbar funktioniert .. wenn ich in der Funktion getTagContent() den return-Wert mit sprintf ausgebe, ist auch alles wunderbar (weil das Terminierungzeichen \0 noch da ist), in der Main-Methode kommt dann aber nur Blödsinn raus, da das Terminierungzeichen für Strings fehlt... Ich seh den Grund aber nicht.
C++:
char * getTagContent(char tagName[], char line[]) {
    int taglen;
    char *subContent;
    int linelen;
    char tagContent[30];


    if(!strstr(line, tagName)) {
        printf("Error");

        exit(2);
    }


    taglen = strlen(tagName);
    subContent = strstr(line, tagName) + taglen + 1;
    linelen = strlen(subContent) - taglen - 3; /* - 3 weil </tagname>*/

    strncpy(tagContent, subContent, linelen);

    tagContent[linelen] = '\0';

/*
    printf("\n%s\n%d", tagContent, strlen(tagContent));  DEBUG */
    return tagContent;
}

C++:
int main(int argc, char* args[]) {

    char *str = getTagContent("muh", "<muh>Hello World</muh>");
    printf("-%s-", str);
}
 
Zuletzt bearbeitet von einem Moderator:
Eigentlich wollte ich schon gerne die Referenzen zuweisen.
Ah so.
Dann brauchst du aber kein [4][81]
Das sind 4 mal 81-Strings, fix, schon angelegt, und speichermäßig nicht änderbar (nur der Inhalt).
Für 4 änderbare Stringpointer brauchst du sowas:
C++:
char* xyz[4];

Mit
C++:
char* xyz[4][81];
hättest du Pointer auf bis zu 324 Strings...

Aber ich hab da noch eine andere Frage...
Das Terminierungszeichen verschwindet normalerweise nicht durch die Rückgabe,
das ist nicht das Problem.
Aber: tagContent wird am Anfang der Funktion angelebt
und am Ende automatisch wieder entfernt.

Der Speicher, wo tagContent seinen Inhalt hat (hatte) kann vom Betriebssystem wieder für andere Sachen verwendet werden, und wird das bei dir auch, bevor die Ausgabe im main kommt.

Eine mögliche Lösung: Mach im main einen String, der als dritter Parameter in die Funktion übergeben und dort statt tagContent befüllt wird.
Den dann ausgeben.
Weil er im main gemacht wurde wird er erst am main-Ende gelöscht,
ist zur Zeit von printf also noch da.

Bitte statt PHP CPP in den Codetags nehmen.

Gruß
 
Nach erneutem Nachdenken, kam mir in den Sinn, dass die Frage eher ungünstig war.
Danke für die Hilfe!
 
Zurück