Problem mit einem char



  • Ich habe ein problem mit einem char und zwar soll man was eingeben als ersatz
    für eine adresse wenn man will aber er bricht sofort ab und es
    kommt ein Fehler von windows:
    Die Anweisung in "0x77c11840"verweist auf Speicher "0x00000030".Der Vorgang
    "written"konnte nicht aufSpeicher ausgeführt werden.

    mit cin ungefähr das gleiche man kann zwar was eingeben aber dann kommt
    der gleiche fehler.

    Vom Debugger:
    #0 0x77c11840 msvcrt!gets (??:??)
    #1 0x00000041 ?? (??:??)
    #2 0x00000038 ?? (??:??)
    #3 0x00004000 ?? (??:??)
    #4 0x0022f6c8 ?? (??:??)
    #5 0x0000000a ?? (??:??)
    #6 0x00000030 ?? (??:??)
    #7 0x0022f6a8 ?? (??:??)
    #8 0x0022f2cc ?? (??:??)
    #9 0x0022ffe0 ?? (??:??)
    #10 0x77c05c94 msvcrt!_except_handler2 (??:??)
    #11 0x0040145a main (??:??)

    Ich gebe hier mal nur denn Fehlercode:

    #include <stdio.h>
    #include <winsock2.h>
    #include <iostream>
    using namespace std;
    int startWinsock(void)
    {
        WSADATA wsa;
        return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr);
    int main(void)
    {
        SOCKET s;
        SOCKADDR_IN addr;
        FILE *file;
        char buf[1024];
        int num;
    int t;
    long rc;
    
        char* ip;    // Ziel-IP
        int port = 21;        // Port
    cout<<"1 Update starten\n2 Update von einem anderem Computer (z.b. von Freunden ohne oder mit Internet)\n";
    cout<<"3 Update abbrechen\n";
    cin>>t;
    if( t == 2 || t == 3 )//eingabe prüfen
    {
        if( t == 2)
        {
            gets(ip);/hier ist der fehler
    
        }
        else
        {
            return 0;
        }
    }
    else
    {
    
     ip="meinedyndnsadrrese";
    
    }
    
    //------------------------------------------------
        // Winsock initialisieren
        if( startWinsock() != 0 )
        {
            printf("Fehler: Winsock kann nicht initialisiert werden\n\n");
            return 1;
        }
    


  • vllt typecast. du übergibst ja noch den asci wert, wenn ich das richtig sehe^^

    t i m



  • Stefan311 schrieb:

    Vom Debugger:
    #0 0x77c11840 msvcrt!gets (??:??)
    #1 0x00000041 ?? (??:??)
    #2 0x00000038 ?? (??:??)
    #3 0x00004000 ?? (??:??)
    #4 0x0022f6c8 ?? (??:??)
    #5 0x0000000a ?? (??:??)
    #6 0x00000030 ?? (??:??)
    #7 0x0022f6a8 ?? (??:??)
    #8 0x0022f2cc ?? (??:??)
    #9 0x0022ffe0 ?? (??:??)
    #10 0x77c05c94 msvcrt!_except_handler2 (??:??)
    #11 0x0040145a main (??:??)

    Hochintressant. Weißt du denn was das bedeutet?

    Stefan311 schrieb:

    Ich gebe hier mal nur denn Fehlercode:

    /* ... */
    
        char* ip;    // Ziel-IP
     /* ... */
            gets(ip);/hier ist der fehler
    /*...*/
    

    Ich sehe nur einen Pointer. Du brauchst schon Speicher wenn du damit etwas anfangen willst.

    1. std::string verwenden
    2. cin >> meinString;

    Gruß



  • Achso dieser speicher damit komm ich immer durch einander das ging so oder(?):
    char* ip;
    ip test[50];



  • du hast ja auch nur einen ZEIGER!!!!

    du kannste doch net einfach so einen zeiger übregeben....

    mach doch ein richtiges char draus. wo ist das problem?



  • Mag zwar böse klingen aber schau dir lieber nochmal richtig die Grundlagen an anstatt mit Winsock zu spielen. Danach eventuell was in Richtung Templates und STL. Danach kannst du sowas dann mal machen.

    Gruß



  • Achso jetzt verstehe ich ups gut das hab ich jetzt aber wie kann ich
    dann in den char so rein schreiben weils ja nicht so ging wie beim int.



  • Problem gelöst ich nutze pointer nicht so oft.Aber danke
    für die schnelle hilfe.


Anmelden zum Antworten