2016-07-02 5 views
0

Ich bin ein noob C Programmierung (ich komme aus dem Land von JS und PHP) und als Lernübung bearbeite ich versuchte, ein Programm zu schreiben, das für das fragt Name des Benutzers, und druckt es dann wieder mit der kleinen Ausnahme aus, den ersten Buchstaben in z zu ändern. Allerdings, wenn ich den Code zu kompilieren ging zurückgegeben es die folgende error Nachricht in Bezug auf die Linie name[0] = "Z";kann keinen C-Array von Index

Warnung: Zuordnung Ganzzahl von Zeigern macht ohne Guss

Gibt es einen Grund, warum ich kann‘ t einem bestimmten Index in einem chararray einen Wert zuweisen?

(Anmerkung: Ich habe versucht "Z" auf ein char typecasting aber es warf nur die error

Warnung: Besetzung von Zeiger auf Ganzzahl anderer size`)

+1

Einfache Anführungszeichen nicht doppelte Anführungszeichen –

Antwort

5

Im Gegensatz zu einigen Sprachen, die tun zwischen Zeichenfolgen und Zeichen nicht unterscheiden, erfordert C eine andere Syntax für Zeichen (im Gegensatz zu einer Zeichenfolge mit einem einzelnen Zeichen).

Sie müssen einfache Anführungszeichen verwenden:

name[0] = 'Z'; 

Der Fehler recht kryptisch ist, though. Es versucht zu sagen, dass "Z", eine C-Zeichenfolge mit einem einzigen Zeichen, name[0] zugewiesen wird, ein integraler Typ von char. C-Zeichenfolgen sind Arrays; Arrays sind in Zeiger konvertierbar. Daher behandelt C dies als eine Zeiger-zu-Int-Zuweisung ohne eine Umwandlung.

+0

Vielen Dank. JS und PHP haben so etwas nicht, also hatte ich keine Ahnung. –

4

ersetzen name[0] = "Z"; mit name[0] = 'Z';.

'single-quatation' ist für ein Zeichen element und "double-quatation" ist für eine String-Zuweisung.

2

In C haben einfache und doppelte Anführungszeichen unterschiedliche Bedeutungen. Tatsächlich gibt es in C kein Konzept von "Strings". Sie haben den grundlegenden Datentyp char, bei dem ein char durch einfache Anführungszeichen dargestellt wird. Um Zeichenfolgen darzustellen, speichern Sie sie als ein Array von Zeichen. Zum Beispiel

char text[] = {'h', 'e', 'l', 'l', 'o'}; 

Dies ist nur ein mühsamer Weg des Schreibens

char text[] = "hello"; 

Dies genau wie das erste Beispiel ist das gleiche, mit der Ausnahme, dass es ein Null-Zeichen \0 am Ende ist (So erkennt C das Ende von "Strings". Es ist das gleiche wie char text[] = {'h', 'e', 'l', 'l', 'o', '\0'}; zu sagen, außer jetzt können Sie einfacher mit Ihrem Array arbeiten, wenn Sie eine string-basierte Verarbeitung darauf durchführen wollen.


auf Ihre Frage kommen, wenn Sie ein bestimmtes Zeichen in einem „string“ indizieren mögen, würden Sie es Index der durch sie zugreifen müssen im Array.

So gibt text[0] das Zeichen h zurück, das vom Typ char ist. Um einen anderen Wert zuzuweisen, müssen Sie ein einzelnes Zeichen in Anführungszeichen wie folgt zuweisen:

text[0] = 'Z';