Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.net  
   

Die mobilen Seiten von c++.net:
https://m.c-plusplus.net

  
C++ Forum :: C++ (alle ISO-Standards) ::  char*[50][50] is incompatible with *(*)[50]     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
CJens
Mitglied

Benutzerprofil
Anmeldungsdatum: 17.12.2010
Beiträge: 363
Beitrag CJens Mitglied 21:24:03 12.10.2017   Titel:   char*[50][50] is incompatible with *(*)[50]            Zitieren

Hi,

habe folgendes Szenario:
C++:
char Dummy[50][50];
SplitLineByBlank(&Dummy, pLine[LineIndex], -1, -1, 250);
 
int SplitLineByBlank(char* Dummy[50][50], char* Line, int StartIndex, int EndIndex, int LineLength);


Bei &Dummy gibt er mir nen Fehler aus:
Argument of type char(*)[50][50] is incompatible with char* (*)[50]

Kann mir da jemand weiter helfen?

Grüße,
Jan
manni66
Unregistrierter




Beitrag manni66 Unregistrierter 21:45:42 12.10.2017   Titel:              Zitieren

Wenn doch nur mal jemand std::string und std::vector erfinden würde...
SeppJ
Global Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 28062
Beitrag SeppJ Global Moderator 22:01:20 12.10.2017   Titel:              Zitieren

Die eigentliche Antwort hat manni66 schon gegeben. In C++ willst du niemals Zeichenketten mit char Arrays machen, du möchtest niemals Arrays an Funktionen übergeben, du möchtest niemals mehrdimensionale Arrays schachteln, und so weiter. Such dir dringend ein gutes Lehrbuch für C++, nicht für C mit cout!

Aber nur zur Erklärung, was bei dir schief ging:
C++:
char* Dummy[50][50]
Das sind 50 Arrays von 50 Arrays von Zeigern auf char. Du hast wahrscheinlich einen Zeiger auf 50 Arrays von 50 Arrays von char gemeint. Letzteres wäre
C++:
char (*Dummy)[50][50]
Damit wird es funktionieren, aber wie schon erwähnt, ist davon dringendst abzuraten!

_________________
Korrekte Rechtschreibung und Grammatik sind das sprachliche Äquivalent zu einer Dusche und gepflegter Kleidung.
DirkB
Mitglied

Benutzerprofil
Anmeldungsdatum: 24.01.2016
Beiträge: 843
Beitrag DirkB Mitglied 22:30:02 12.10.2017   Titel:              Zitieren

Warum überhaupt eine Zeiger-Array-Array?

Für C sollte
C:
SplitLineByBlank(Dummy, pLine[LineIndex], -1, -1, 250);
 
int SplitLineByBlank(char Dummy[50][50], char* Line, int StartIndex, int EndIndex, int LineLength);
reichen.
Wutz
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2010
Beiträge: 3902
Beitrag Wutz Mitglied 10:33:58 13.10.2017   Titel:              Zitieren

Zeiger (im C++ Jargon auch rohe C Zeiger genannt) gehören - wie man auch hier an den Antworten wieder sieht - nicht in C++ Hände:

C:
1
2
3
4
5
6
7
8
9
10
11
12
int SplitLineByBlank(char (*Dummy)[50][50], char* Line, int StartIndex, int EndIndex, int LineLength)
{
    printf("Zeigergröße:%zu Inhaltgröße:%zu", sizeof(Dummy),sizeof(*Dummy));
    return 0;
}
 
int main()
{
    char Dummy[50][50];
    SplitLineByBlank(&Dummy, 0, -1, -1, 250);
    return 0;
}


https://ideone.com/zk6WpV

Ein Zeiger auf ein char[50][50]-Array ist inkompatibel (d.h. UB bei Dereferenzierung) zu einem Zeiger auf ein char*[50]-Array.

_________________
Java, the best argument for Smalltalk since C++. -- Frank Winkler
C++ Forum :: C++ (alle ISO-Standards) ::  char*[50][50] is incompatible with *(*)[50]   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.net ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.