Unterschied zw C++ und C, Zeichen einzeln ausgeben
-
Hallo,
es geht darum eine Zeichenkette vom Typ const char in seine einzelnen Zeichen zu zerlegen. Da mein kompletter Sourcecode etwas umfangreich ist, hab ich mein Problem auf 2 minimale Codes beschränkt.
Meine Frage dazu: Wieso funktioniert der C++-Code, oder besser, wieso funktioniert der C-Code nicht? Ich bin sicher, ihr könnt mir da auf die Sprünge helfen
Grüße
#include <iostream> #include <string> using namespace std; int main () { const char c[] = "0123456789"; int i, l; l = strlen(c); if(l == 0) { cout << "String leer" << endl; } for (i = 0; i < l; i++) { cout << "c["<<i<<"] = " << c[i] << endl; } cin.get(); }
#include <stdio.h> #include <string> int main () { const char c[] = "0123456789"; char zeichen[1]; int i, l; l = strlen(c); if(l == 0) { printf("String leer\n"); } for (i = 0; i < l; i++) { printf("c[%d]:%s\n", i, c[i]); } getchar(); }
-
printf("c[%d]:%s\n", i, c[i]);
=>
printf("c[%d]:%c\n", i, c[i]);
-
Falsche Formatspezifizierer: %s ist für Zeichenketten, du suchst %c.
string
ist der falsche Header fürstrlen
. In C++ ist das im Headercstring
, in C im Headerstring.h
. Da esstring
in C gar nicht gibt, benutzt du wohl einen C++-Compiler für C. Was nicht empfehlenswert ist (aka: Tu das nicht!).
-
Schande über mein Haupt
ich dachte ich versuchs mal mit einer Entwicklungsumgebung von Microsoft, um vielleicht eine brauchbare Fehlermeldung zu bekommen. Dass es letztlich an einem Anfängerfehler lag, ist mir gerade etwas peinlich...
@SeppJ: Generell kompliliere ich nur mit Borland, und ich glaube ich bleibe bei C, das hin und her switchen zw C und C++ führt dann wohl dazu, dass aus einem s ein c wird und ich es nicht sehe
-
Wenn du C machen möchtest, ist es ganz besonders empfehlenswert, einen C-Compiler zu benutzen. C und C++ sind nicht (mehr) so kompatibel, wie es gerne dargestellt wird.
Beispiel: Einfachstes C-Programm mit dynamischer Speicherverwaltung:
char *foo = malloc(5); // In C++ nicht erlaubt.
Wenn dein Problem aber die Typsicherheit ist, dann bietet sich doch gerade an, C++ zu machen, wenn du beides kannst und die Wahl hast.
-
#include <iostream> // #include <string> // Dieser Header ist unnötig. using namespace std; int main () { const char c[] = "0123456789"; int l = sizeof(c); // Die Größe des Arrays ist doch schon zur Compile-Zeit bekannt. Dazu: Initialisieren. if(l == 0) { cout << "String leer\n"; // Du willst nicht flushen sondern einen Zeilenumbruch } for (int i = 0; i < l; i++) // i Lokal definieren { cout << "c["<<i<<"] = " << c[i] << '\n'; } cin.get(); }
-
SeppJ schrieb:
Wenn dein Problem aber die Typsicherheit ist, dann bietet sich doch gerade an, C++ zu machen, wenn du beides kannst und die Wahl hast.
C++ nutz ich egtl nur in Verbindung mit MFC, C mag ich irgendwie lieber, kommt mir mehr nach "Hammer und Meißel" vor