c++ problem mit progrämmchen

Diskutiere c++ problem mit progrämmchen im C/C++ Forum im Bereich Programmieren unter Linux/Unix; hi leute, hab mir gerade ein kleines programm geschrieben. leider geht es aber so nicht. wieso? finde den fehler nicht!! kann mir da wer helfen?...

  1. #1 villiboy, 23.01.2006
    villiboy

    villiboy Mitglied

    Dabei seit:
    07.04.2005
    Beiträge:
    37
    Zustimmungen:
    0
    hi leute,
    hab mir gerade ein kleines programm geschrieben. leider geht es aber so nicht. wieso? finde den fehler nicht!! kann mir da wer helfen? wäre nett, danke!!!
    Code:
    #include <iostream>
    #include <conio.h>
    using namespace std;
    
    int main(void){
    
    char * str="ABC-129";
    int i = 0;
    
    while(str){
    		   if((*(str+i))>='A' && (*(str+i))<='Z')
    		   *(str+i)='X';
    		   i++;
    }
    
    cout << str;
    getch();
    return 0;
    }
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. pinky

    pinky König

    Dabei seit:
    11.08.2004
    Beiträge:
    795
    Zustimmungen:
    0
    Hallo,
    der erste Fehler ist schonmal, dass conio.h nicht zum C++ Standard gehört. Das ist afaik eine windows lib.
     
  4. #3 thorus, 23.01.2006
    Zuletzt bearbeitet: 23.01.2006
    thorus

    thorus GNU-Freiheitskämpfer

    Dabei seit:
    03.11.2002
    Beiträge:
    757
    Zustimmungen:
    0
    Ort:
    Passau, Niederbayern
    Zunächst musst du, wie pinky schon angedeutet hat, conio.h und getch() entfernen. Es gibt ähnliche Befehle in der (N)Curses-Lib unter Unices, falls du sowas brauchst.

    Dann kannst du nicht einfach in Speicherbereiche schreiben, die nicht schreibbar sind. str zeigt mit der Zuweisung auf den String in ein Speichersegment, auf das du keinen Zugriff hast (Segmentation fault). Also musst du selbst vorher Speicher allokieren und den String da rein packen bzw. den gleich per stdin holen.

    Dann würde ich nicht i als Laufvariable benutzen, sondern gleich mit nem Pointer drüberrattern, dann musst nicht so viel schreiben.

    Beispiel (ungetestet):
    Code:
    #include <iostream>
    
    using namespace std;
    
    int main(){
        char *str, *p;
    
        str = (char *)malloc(strlen(str));
        strcpy(str, "ABC-129");
        p = str-1;
    
        while(*(++p))
            if(*p >= 'A' && *p <= 'Z')
                *p = 'X';
    
        cout << str << endl;
        return 0;
    }
     
  5. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Die Allokierung ist hier sicher nicht korrekt, da str noch nicht gesetzt ist und somit auch keine bestimmte Laenge hat. Eine Defintion mit Deklaration wie
    Code:
       char* str =  "ABC-129";
    
    ist voellig korrekt und 'str' wird automatisch mit einem '\0' terminiert. Der eigentliche Fehler des urspruenglichen Programmes lag in der Kondition des 'while': Da 'str' gleichbedeutend mit '&str[0]' ist, aendert sich seinWert nicht, und die while - Schleife hat keine Abbruchbedingung.
    'while ( str )...' waere korrekt. Oder eben auch die Zeiger-Version von thorus.
     
  6. thorus

    thorus GNU-Freiheitskämpfer

    Dabei seit:
    03.11.2002
    Beiträge:
    757
    Zustimmungen:
    0
    Ort:
    Passau, Niederbayern
    Ups... naja, gings ums Prinzip. ;)
     
  7. #6 villiboy, 23.01.2006
    villiboy

    villiboy Mitglied

    Dabei seit:
    07.04.2005
    Beiträge:
    37
    Zustimmungen:
    0
    vielen dank für die hilfe aber das mit dem while(*(str+i)) klappt noch nicht ....
    Code:
    
    [B][...][/B]
    using namespace std;
    
    int main(void){
    
    char * str="ABC-129";
    int i = 0;
    
    while(*(str+i)){
    		   if((*(str+i))>='A' && (*(str+i))<='Z')
    		   cout <<"Wieso?";		   
    		   i++;
    }
    
    cout << str <<endl;
    [B][...][/B]
    
     
  8. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Was genau klappt denn nicht? Bei mir kommt als Ergebnis
    Wieso?Wieso?Wieso?ABC-129

    Und das ist doch richtig.
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 villiboy, 24.01.2006
    villiboy

    villiboy Mitglied

    Dabei seit:
    07.04.2005
    Beiträge:
    37
    Zustimmungen:
    0
    upsss, ich möchte abc mit xxx überschreiben *gg*
     
  11. rikola

    rikola Foren Gott

    Dabei seit:
    23.08.2005
    Beiträge:
    2.133
    Zustimmungen:
    0
    Ich kann dir nicht genau erklaeren, wieso, aber Du musst str so definieren:
    Code:
     char str[] = "ABC-129";
    
    Dann kannst Du mit "str = 'X';"
    Die ersten drei Zeichen ueberschreiben.
    Ich nehme an, dass mit 'char* str' ein Zeiger auf einen konstanten Bereich im Speicher gesetzt wird, den Du nicht aendern darfst, waehrend Du mit 'char str[]' wirklich einen Speicherbereich reservierst, den Du auch aendern darfst.
    mit std::string statt char* oder char[] passiert so etwas nicht!
     
Thema:

c++ problem mit progrämmchen

Die Seite wird geladen...

c++ problem mit progrämmchen - Ähnliche Themen

  1. Netzwerkproblem ? , wo ud wie suchen

    Netzwerkproblem ? , wo ud wie suchen: Hallo Folgende Problem: Testserver ist i686 Debian-unstable , auf dem läuft primär der apt-proxy apt-cahcer ng. Zugriff im Moment nur per ssh....
  2. Verständnisproblem Samba / LDAP

    Verständnisproblem Samba / LDAP: Hallo zusammen! Ich habe unter Ubuntu 16.04 einen LDAP und Samba Server aufgesetzt. Diese scheinen auch ordnungsgemäß zu funktionieren, sodaß ich...
  3. nginx+php-fpm problem

    nginx+php-fpm problem: Moin, ich hab hier gerade ein Problem und keine Idee mehr woran es liegt. Ich muss wie schon in der Überschrift erwähnt nginx dazu bringen php...
  4. Problem mit Windows auf Ordner auf dem Linuxsystem zuzugreifen

    Problem mit Windows auf Ordner auf dem Linuxsystem zuzugreifen: Ich mache gerade meine ersten Schritte mit Linux und würde gerne auf Dateien meines Linuxsystems auch mit Windows zugreifen, ich bin am...
  5. Virtualboxproblem

    Virtualboxproblem: Hallo Folgnedes Problem: Ich kann ohne Probleme In Debian-Sid, 64Bit und virtualbox-dkms Unixoide installieren, wenn es sich um eine...