So deklarieren Sie Strings in C [duplicate]

Lesezeit: 3 Minuten

Benutzeravatar von summerc
sommerc

Kann mir jemand erklären, was der Unterschied zwischen diesen Codezeilen ist

char *p = "String";
char p2[] = "String";
char p3[7] = "String";

In welchem ​​Fall sollte ich jedes der oben genannten verwenden?

  • Nun, das letzte ist ein Pufferüberlauf, also ist das nett.

    – Dan

    4. Januar 2012 um 18:57 Uhr

  • Sie drittes Beispiel sollte sein p3[6]: Sie müssen die abschließende 0 berücksichtigen

    – fg

    4. Januar 2012 um 18:57 Uhr

  • @fge: braucht tatsächlich 7.

    – Matte

    4. Januar 2012 um 18:58 Uhr

  • @Dan eher Kompilierungsfehler

    – wenigadv

    4. Januar 2012 um 18:58 Uhr

  • Das dritte Beispiel wird bearbeitet

    – sommerc

    4. Januar 2012 um 19:00 Uhr

Benutzeravatar von fge
fge

Dieser Link sollte Ihre Neugier befriedigen.

Grundsätzlich (vergessen Sie Ihr drittes Beispiel, das schlecht ist) besteht der Unterschied zwischen 1 und 2 darin, dass 1 Platz für einen Zeiger auf das Array zuweist.

Aber im Code können Sie sie trotzdem als Zeiger manipulieren – nur können Sie den zweiten nicht neu zuweisen.

  • Jungs, bevor Sie den Link, den fge gepostet hat, mit einem Lesezeichen versehen, beachten Sie, dass die FAQ-Website entsprechend aktualisiert wurde c-faq.com und der spezifische Link, der dazu gepostet wurde c-faq.com/aryptr (2.1,2.2) aber ohne Änderungen. Nur für den Fall.

    – Yannis Dran

    12. Januar 2019 um 16:08 Uhr

Benutzeravatar von ob_dev
ob_dev

Strings werden in C als Arrays von Zeichen dargestellt.

char *p = "String";

Sie deklarieren einen Zeiger, der auf eine Zeichenfolge zeigt, die irgendwo in Ihrem Programm gespeichert ist (das Ändern dieser Zeichenfolge ist ein undefiniertes Verhalten), gemäß der Programmiersprache C, 2. Ausgabe.

char p2[] = "String";

Sie deklarieren ein Array von Zeichen, das mit der Zeichenfolge “String” initialisiert wurde, und überlassen dem Compiler die Aufgabe, die Größe des Arrays zu zählen.

char p3[5] = "String";

Sie deklarieren ein Array der Größe 5 und initialisieren es mit “String”. Dies ist ein Fehler, weil “String” nicht in 5 Elemente passt.

char p3[7] = "String"; ist die korrekte Deklaration (‘\0’ ist das abschließende Zeichen in c-Strings).

http://c-faq.com/~scs/cclass/notes/sx8.html

Sie sollten das dritte nicht verwenden, weil es falsch ist. “String” benötigt 7 Bytes, nicht 5.

Der erste ist ein Zeiger (kann einer anderen Adresse zugewiesen werden), die anderen beiden sind als Arrays deklariert und können nicht anderen Speicherorten zugewiesen werden (aber ihr Inhalt kann sich ändern, use const um das zu vermeiden).

  • char p3[5] = "String"; Während gefährlich nicht falsch ist und in C gültig ist (aber nicht in C++)

    – au

    4. Januar 2012 um 19:05 Uhr


  • @ouah – es ist falsch. Es kann die Kompilierung bestehen, ist es aber trotzdem falsch.

    – wenigadv

    4. Januar 2012 um 19:06 Uhr

  • dies ist eine streng konforme Definition für ein Objekt. Ein streng konformes Programm ist nicht “falsch” in Bezug auf C.

    – au

    4. Januar 2012 um 19:15 Uhr


  • @ouah Blatant Laufzeitfehler sind falsch.

    – Chris Eberle

    4. Januar 2012 um 19:47 Uhr

  • @ Pacerier, bitte hör auf, absichtlich pedantisch zu sein. Sie wissen sehr gut, dass meine Aussage nicht bedeutet „macht das Programm unbrauchbar“. Der umgebende Code ist irrelevant. Wenn ich in einen Speicher schreibe, in den ich nicht schreiben sollte, ist das schlechtes Benehmen. Das ist ein Fehler. Auch wenn es niemand merkt, ist das immer noch ein Bug. Auch wenn mein Code nie ausgeführt wird, ist immer noch ein Fehler vorhanden. Der Fehler wird möglicherweise nicht ausgeführt, aber das bedeutet nicht, dass mein Code fehlerfrei ist. Hör auf mit den Spielchen, du bist nicht schlau.

    – Chris Eberle

    19. Dezember 2014 um 4:10 Uhr

Benutzeravatar von SKM
SKM

char *p = "String";   means pointer to a string type variable.

char p3[5] = "String"; bedeutet, dass Sie die Größe des Arrays so vordefinieren, dass es aus nicht mehr als 5 Elementen besteht. Beachten Sie, dass für Zeichenfolgen die Null “\0” auch als Element betrachtet wird. Diese Anweisung würde also einen Fehler ergeben, da die Anzahl der Elemente 7 ist, also sollte es sein:

char p3[7]= "String";

1422450cookie-checkSo deklarieren Sie Strings in C [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy