Erstellen Sie ein string-array mit Zeichen in C
Wenn ich dies tun
char *paths[10];
paths[0] = "123456";
printf(1,"%s\n",paths[0]);
printf(1,"%c\n",paths[0][2]);
Ausgabe:
123456
3
Aber wenn ich Sie dies tun
char *paths[10];
paths[0][0]='1';
paths[0][1]='2';
paths[0][2]='3';
paths[0][3]='4';
paths[0][4]='5';
paths[0][5]='6';
printf(1,"%s\n",paths[0]);
printf(1,"%c\n",paths[0][2]);
Ausgabe:
(null)
3
Warum es null, in diesem Fall?
So erstellen Sie ein string-array mit Zeichen, die in C? Ich bin ein bisschen neu in C und Gefühl einige Schwierigkeiten, das Programm in C
InformationsquelleAutor SMUsamaShah | 2011-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
paths
ist ein array von Zeigern.paths
ist nicht initialisiert, nichts. So, es hat Müll Werte. Sie benötigen Speicher mitmalloc
. Du hast gerade Pech, dass dieses Programm tatsächlich arbeitete schweigend. Denken Sie an, welche Adresse Lage wärepaths[0][0]
würde die Ausbeute zu ordnen 1.Auf der anderen Seite, das hat funktioniert, weil -
"123456"
ist ein string-literal mit Wohnsitz in der Lektüre nur die Lage. Also, es gibt die Startadresse, die Lage, diepaths[0]
hält. Zu erklären, richtig -Bitte haben Sie Verständnis @Matthäus post. Es ist klar.
Stattdessen habe ich Ihren Punkt. Wenn ich
paths[0] = "123456";
es wird automatisch initialisiert, es Länge (6). Aber wenn ich das machepaths[0][0]
es nicht wissen, die Größe der zweiten dimension des Arrays. Richtig?Es geht nicht um die dimension. String-Literale sind allozierte Speicher automatisch von der zugrunde liegenden Implementierung. Aber wenn du sagst
[0][0]
Sie versuchen, Zugriff auf einen gültigen Speicherbereich, die noch nicht zugeordnet, obwohl.InformationsquelleAutor Mahesh
Haben Sie eine Menge von Optionen von verschiedenen Antworten, ich bin nur durch ein paar Punkte.
Sie können erstellen Sie ein string-array wie folgt aus:
I. erstellen Sie ein array von nur-Lesen-strings wie folgt vor:
Dadurch wird der array mit 3 nur-lese - strings. Sie können nicht ändern, die Zeichen des Strings in diesem Fall also
string_array0[0][0]='R';
ist illegale.II. Sie können erklären, array von Zeigern & benutzen Sie Sie, wie Sie benötigen.
III. Sie deklarieren ein zweidimensionales Zeichen-array.
IV. Sie können verwenden Sie Zeiger auf Zeiger.
Punkte zu beachten:
Wenn Sie die Erstellung von nur-lese-string, die Sie nicht ändern können, den Charakter
in der Zeichenfolge.
Ob Sie eine Füllung, die das Zeichen-array, stellen Sie sicher, dass Sie
Speicher für NUL-Zeichen & stellen Sie sicher, Sie beenden Ihre
string-Daten mit NUL Zeichen.
Arbeitsspeicher zuweisen, stellen Sie sicher, dass Sie prüfen, ob die Speicherreservierung erfolgt
richtig & frei Speicher nach Gebrauch.
string.h
für string-manipulation.Hoffe, das hilft!
P. S.:
printf(1,"%s\n",paths[0]);
sieht schattigenIn diesem Fall verwenden Sie Zeiger array & malloc. Wenn Sie nicht sicher sind, die Anzahl der Zeichenfolge, es ist eine weitere option. Verwenden Sie Zeiger auf Zeiger. Kennen Sie die Anzahl der strings bei der Verwendung?
Nein, ich bin eigentlich auf der Analyse einer Datei und Speicherung von Zeichenfolgen in der Reihe (VORGEGEBENE Größe) durch die Prüfung Trennzeichen.
InformationsquelleAutor another.anon.coward
paths
ist ein array von 10 Zeigern aufchar
. Allerdings, die ersten Elemente sind Zeiger, die nicht dereferenziert. Diese sind entweder wild (für ein array in einer Funktion) oder NULL für ein statisches array. Eine wilde Zeiger ist eine nicht initialisierte.Ich würde dein glaube ist statisch, da
paths[0]
istNULL
. Aber, es könnte ein Zufall sein.Beim dereferenzieren eine
NULL
oder nicht initialisierte Zeiger, den Sie gerade Lesen oder schreiben auf Speicher, die Sie nicht besitzen. Dies führt zu undefiniertem Verhalten, die einschließen können, stürzt Ihr Programm.Bist du eigentlich Glück haben, dass es nicht zum Absturz bringen. Dies ist wahrscheinlich, weil der compiler Sie schreiben eine Konstante
paths[0][2]
und änderungen Ihresprintf
zu drucken, die Konstante direkt. Sie können nicht auf diese angewiesen sind.Wenn Sie wollen, um einen Zeiger dürfen Sie schreiben, tun:
string_length
ist die Anzahl der Zeichen, die Sie schreiben können. Die 1 gibt Raum für eine NUL. Wenn Sie fertig sind, müssen Siefree
.InformationsquelleAutor Matthew Flaschen
Für dein zweites Beispiel, wenn Sie wissen, die Größe der einzelnen Strings können Sie schreiben z.B.
...
Diese Weise haben Sie 10 strings der Länge 6 (und nur den ersten string so weit).
paths[0][4]
,paths[0][5]
sollte, werden NUL-ZeichenInformationsquelleAutor Matthias 009
Definieren Sie die Zeichenfolge selbst, direkt nach
wie diese
und in der Sie dies tun können
also würde der code so Aussehen
InformationsquelleAutor IceCodr