2016-11-20 2 views
0

Ich suche eine Lösung für mein Problem (Anfänger hier).C - Konvertieren int in char

Ich habe ein Array von Zeichenfolgen (char** arrayNum) und ich möchte die Anzahl der Elemente dieses Arrays am ersten Index speichern.

Aber ich finde nicht den richtigen Weg, um die Anzahl der Elemente als String (oder Zeichen) zu konvertieren.

ich itoa versucht haben, (char) Gießen, +'0', snprintf ... nichts funktioniert.

Wie jedes Mal, wenn ich eine Frage zu Stack Overflow stelle, bin ich sicher, dass die Lösung offensichtlich ist. Vielen Dank im Voraus für Ihre Hilfe.

Also habe ich ein Array von Strings char** arrayNum, die ich bevölkeren, so dass der Index 0 leer bleibt.

Wenn ich versuche, eine Zeichenfolge arrayNum[0] zuzuweisen:

  • Dies funktioniert: arrayNum[0] = "blabla";

  • Dies funktioniert nicht: arrayNum[0] = (char) ((arraySize - 1)+'0');

ich unzählige andere Kombinationen ausprobiert haben, Ich erinnere mich nicht einmal ...

+2

Da 'arrayNum [0]' vom Typ 'char *' nicht vom Typ 'char' ist, können Sie ihm kein' char' zuweisen. –

+1

Kann ich dich zuerst fragen, warum willst du das tun? Da Sie offensichtlich auch 'const char *' (zum Beispiel 'blabla '') den Elementen Ihres Arrays zuweisen, sollten Sie es als' const char ** arrayNum 'deklarieren. – nbro

+1

Gibt es einen Grund, dass Sie eine 'struct' nicht mit der Länge als ein Element und das Array von Strings als ein zweites Element verwenden können? – mhawke

Antwort

1

arrayNum kann als Array von Strings (char *) betrachtet werden. Sie werden also natürlich Probleme haben, einem Element dieses Arrays einen char (oder einen anderen Typ als char *) zuzuordnen.

Ich denke, es wäre vorzuziehen, die Länge des Arrays getrennt zum Array zu speichern. Zum Beispiel mit einem struct. Etwas anderes führt zu Verwirrung.

Wenn Sie wirklich, wirklich die Länge in dem ersten Element gespeichert werden soll, dann könnte man so etwas tun:

arrayNum[0] = malloc(sizeof(char)); 
arrayNum[0][0] = (char) ((arraySize - 1)+'0'); 

Dieser Vorteil der Tatsache Rechnung, dass arrayNum ist streng ein Array von Zeigern und jeder Diese Zeiger ist ein Zeiger auf eine char. So kann es auf ein einzelnes Zeichen oder ein Array von Zeichen (eine "Zeichenfolge") zeigen.

Vergleichen Sie dies aus Gründen der Klarheit mit (sagen wir):

struct elements { 
    int length; 
    char **data; 
}; 
+0

Ich habe die Struktur wie Sie vorgeschlagen erstellt. Es ist eine bessere Lösung und bessere Codierung, denke ich. –

1

arrayNumnicht einem "Array von Strings."

Es könnte für Sie nützlich sein, darüber nachzudenken, aber es ist wichtig für Sie zu wissen, was es wirklich ist. Es ist ein Array von Zeigern, wobei jeder Zeiger ein Zeiger auf char ist.

Manchmal ist ein Zeiger auf char ist ein „string“, und manchmal ist es ein Zeiger in die Mitte eine Schnur, und es ist manchmal nur ein Zeiger zu einem gewissen irgendwo Charakter. Alles hängt davon ab, wie Sie es verwenden.

Die C-Programmiersprache hat nicht wirklich Strings. Es hat String Literale, aber ein String-Literal ist nur ein const Array von Zeichen, die mit einem \000 endet. Der Grund, warum Sie arrayNum[0] = "blabla"; schreiben kann, ist, weil der Wert des Stringliteral "blabla" ein Zeiger auf das erste 'b' in „blabla“ ist, und die Elemente des arrayNum Array sind Zeiger auf Zeichen.

Es ist Ihre Verantwortung, ob arrayNum[i] Punkte auf das erste Zeichen einiger Zeichenfolge zu entscheiden, oder ob es passiert einfach zu einem gewissen einzelnes Zeichen zu zeigen; und es liegt in Ihrer Verantwortung, zu entscheiden, ob es auf etwas zeigt, das freed() sein muss oder ob es auf den Nur-Lese-Speicher zeigt oder ob es auf etwas auf dem Stapel zeigt oder ob es auf/in etwas statisch zugewiesenes zeigt Datenstruktur.

Die Sprache ist egal.