Es gibt einige andere Probleme mit Ihrem Code.
Zeiger werden normalerweise verwendet, um auf Daten zu verweisen, die bereits existieren, also können Sie sie so verwenden
char arr []="C ++";
char * t = & amp; arr [0];
Auch modifizierbar,
%Vor%natürlich gibt es eine besondere Art der Verwendung von String - Lassen Sie den Zeiger auf eine String-Konstante zeigen. Genau wie du es benutzt hast:
%Vor%Es gibt einen besseren Weg, es zu benutzen, der tragbarer und leichter zu verstehen ist:
%Vor%2.Sie Code haben viele Orte, die nicht in c Standard
sind %Vor%3.about Zeichenkette
Linux ist liniengepuffert (ignorieren Sie dies, wenn Sie Windows verwenden: P) & amp; Um das Lesen in der Konsole zu erleichtern, fügen Sie am Ende der gedruckten Zeichenfolge ein '\ n' hinzu:
%Vor%Wenn Sie nach einer Zeichenfolge keinen Zeilenumbruch wünschen. In Windows verwenden Sie so, wie Sie möchten:
printf("%s",t);
Unter Linux sollten Sie einen fflush () in stdlib.h hinzufügen.
%Vor% Ein C-String-Literal erstellt ein anonymes Array von char
. Jeder Versuch, dieses Array zu ändern, hat ein nicht definiertes Verhalten. Im Idealfall wird dies erzwungen, indem das Array const
erstellt wird, aber C hat nicht immer const
, und das Hinzufügen zu String-Literalen hätte den vorhandenen Code zerstört.
Dies ist legal, aber potenziell riskant. Das Array, das die Zeichen 'C', '+', '+', '
enthält, könnte nach dem Laune des Compilers entweder im Lese-Schreib-Speicher oder im Nur-Lese-Speicher gespeichert werden. const
'
Hier ist das Verhalten Ihres Programms undefiniert, weil Sie versuchen, den Inhalt eines String-Literals zu ändern. Der Compiler muss Sie weder zur Kompilierungszeit noch zur Laufzeit warnen, noch ist es erforderlich, etwas zu tun, um es "arbeiten" zu lassen.
Wenn Sie dem Compiler mitteilen möchten, dass die Zeichenfolge schreibgeschützt ist, fügen Sie am besten das t
-Qualifikationsmerkmal hinzu:
Der Compiler sollte Sie dann zumindest warnen, wenn Sie versuchen, das String-Literal zu ändern - zumindest wenn Sie versuchen, dies über t
zu tun.
Wenn Sie es ändern möchten, sollten Sie t
ein beschreibbares Array machen:
Anstatt "C++"
einen Zeiger zu setzen, der auf den Anfang von t
zeigt, wird "C++"
zu einem Array, in das der Inhalt von t
kopiert wird. Sie können tun, was Sie wollen mit dem Inhalt von <conio.h>
, solange Sie nicht außerhalb seiner Grenzen gehen.
Einige weitere Kommentare zu Ihrem Code:
%Vor% int main(void)
ist spezifisch für Windows (und MS-DOS). Wenn Sie Ihr Programm nicht für andere Systeme benötigen, ist das in Ordnung. Wenn Sie möchten, dass es tragbar ist, entfernen Sie es.
Das ist falsch; Die richtige Deklaration ist int main()
( getchar()
ist in C fraglich, aber in C ++ ist es korrekt.)
Ihre Ausgabe sollte mit einer Zeilenumbruch enden; Verschiedene schlimme Dinge können passieren, wenn nicht. Mach das:
%Vor%Und das:
%Vor% ist Windows-spezifisch. Es ist wahrscheinlich notwendig, dass das Ausgabefenster nicht geschlossen wird, wenn das Programm beendet wird, ein unglückliches Problem mit Windows-Entwicklungssystemen. Wenn Sie eine Standardmethode verwenden möchten, liest main
einfach ein Zeichen aus der Standardeingabe und lässt Sie Enter drücken, um es zu beenden (obwohl Sie keine Eingabeaufforderung erhalten).
Schließlich, da int
ein Ergebnis vom Typ }
zurückgibt, sollte dies tatsächlich der Fall sein. Sie können
vor dem schließenden return 0;
. Dies ist nicht wirklich erforderlich, aber es ist keine schlechte Idee. (C99 fügt eine implizite %code% hinzu, aber Microsoft unterstützt C99 nicht.)
Tags und Links c