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. Problem bei der installation einer Sun Netzwerkkarte

    Problem bei der installation einer Sun Netzwerkkarte: Guten Morgen zusammen, beim installieren einer zusätzlichen Netzwerkkarte habe ich ein Problem. Die Karte wird nicht automatisch installiert. Es...
  2. Problem bei der Vergabe von Sciherheitsinformationen auf eine Freiagbe

    Problem bei der Vergabe von Sciherheitsinformationen auf eine Freiagbe: Liebe Community, zurzeit arbeite ich an eine Active Directory Domäne die mittels Samba läuft. Dazu habe ich einen AD DC auf Debian 8.7 mit Samba...
  3. 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....
  4. 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...
  5. 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...