c++ problem mit progrämmchen

Dieses Thema im Forum "C/C++" wurde erstellt von villiboy, 23.01.2006.

  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. Virtualboxproblem

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

    grub-pc Probleme bei upgrade: Hallo, ich habe beim dist-upgrade folgendes Problem: ---------- Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt. Trigger für...
  3. Problem bei apt-get upgrade (Kali 2.0)

    Problem bei apt-get upgrade (Kali 2.0): Hi, seit paar Tagen habe ich einige Probs. Dachte es sei mal an der Zeit für ein Update und nun tauchen da einige Fehler auf: Es müssen noch 0 B...
  4. Probleme mit YUM

    Probleme mit YUM: Hallo, ich habe CentOs 7 als Dualboot mit Windows 7 auf einen Dell Latitude E5510 installiert. Dies hat soweit auch alles geklappt. Leider habe...
  5. Problem mit Win-Zugriff auf SAMBA

    Problem mit Win-Zugriff auf SAMBA: Hallo rundherum, vielleicht hat jemand eine Idee... Habe jetzt schon 1 1/2 Tage damit verbraten und den Fehler nicht gefunden. Problem:...