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]);
    

  • Mod

    Falsche Formatspezifizierer: %s ist für Zeichenketten, du suchst %c.

    string ist der falsche Header für strlen . In C++ ist das im Header cstring , in C im Header string.h . Da es string 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 😡


  • Mod

    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 😃


Anmelden zum Antworten