char array in string umformen ?



  • FUA ! Es klappt ! Nur noch 1 einger Fehler !!!

    Fehler 1 error C2065: 'UNLEN': nichtdeklarierter Bezeichner c:\dokumente und einstellungen\simon\eigene dateien\visual studio 2008\projects\rg\rg\rg.cpp 20

    ich bin schon wieder überfordert !!! aber aus Fehlern lernt man(n) , nich ?



  • Na. Doppelklick mal auf die Meldung und lies sie genau. Du hast UNLEN nicht deklariert.



  • was ist UNLEN denn ? ich weis ja noch nicht einmal wofür die gebraucht wird !? Das mit dem vector is mir auhc neu!



  • FedoX schrieb:

    was ist UNLEN denn ? ich weis ja noch nicht einmal wofür die gebraucht wird !? Das mit dem vector is mir auhc neu!

    Mach Doppelklick auf die Fehlermeldung, dann kommst du zu der Zeile Code, wo das drin steht. Sag mal so das ist. (und/oder zeig die Stelle Code mal..)



  • [cpp]#include <iostream>
    #include <windows.h>
    // #include <stdio.h> Kein Standard C++ Header, richtig wäre <cstdio>
    // #include <stdlib.h> Kein Standard C++ Header, richtig wäre <cstdlib>
    // #include <sys/types.h> Wofür?
    // #include <sys/stat.h> Wofür? Die letzten 4 Header werden nicht benötigt, raus damit!
    #include <string>
    #include <vector>
    
    // using namespace std;
    // Auf using namespace sollte man, wenn möglich, verzichten.
    
    int main()
    {
      // char user_name[255];
      // char computer_name[255];
      // Bitte keine rohen Arrays in C++
    	[quote]std::vector<char> user_name(UNLEN + 1); // Richige Grösse verwenden -> siehe MSDN[/quote]
      std::vector<char> computer_name(MAX_COMPUTERNAME_LENGTH + 1); // Richtige Grösse verwenden -> siehe MSDN
    
      // DWORD nSize; Bitte keine ungarische Notation! Ist aber Geschmacksache ...
      DWORD size = computer_name.size();
    
      // nSize = sizeof( computer_name ); überflüssig jetzt.
    
      GetComputerName(&computer_name[0], &size);
      std::cout << "Computername:         " << &computer_name[0] << std::endl;
    
      //User Name herrausbekommen
      // nSize = sizeof( user_name ); überflüssig jetzt.
      size = user_name.size();
    
      GetUserName(&user_name[0], &size);
    
      std::cout << std::endl;
    
      // getchar(); Das ist C, hat in C++ nichts zu suchen!
      std::cin.get(); // <- macht das gleiche.
    
      // Als nächstes, für Pfadangaben, kann man unter Windows auch den Slash '/' nehmen.
      // Das macht es einfacher zu schreiben.
      std::string user_name_string = "C:/Dokumente und Einstellungen/";
      user_name_string.append(&user_name[0], user_name.size() - 1);
                                                             // ^ ohne das \0 Zeichen.
    
      user_name_string.append("/Eigene Dateien/Eigene Bilder/Beispielbilder/Blaue Berge.jpg");
    
      CopyFile(user_name_string.c_str(), "C:/BILD.jpg", FALSE);
      // user_name_string.c_str() -> Hole einen null terminierten String
      // Zudem muss man oder sollte man TRUE/FALSE verwenden bei WinAPI Funktionen.
      // Weil die kennen bool eigentlich nicht.
    
      return 0;
    } [/cpp]
    


  • UNLEN : UserName LENgth
    maximale Länge von Usernames eben
    findet sich im Windowsheader lmcons.h


  • Administrator

    Ich hatte ja hingeschrieben, du sollst in der MSDN nachschauen. Also nehmen wir zum Beispiel www.altavista.ch, geben MSDN UNLEN ein (http://ch.altavista.com/web/results?itag=ody&q=MSDN+UNLEN&kgs=1&kls=0) und bekommen als erstes Resultat:
    http://msdn.microsoft.com/en-us/library/ms724432.aspx

    Und dort drin steht:

    lpBuffer [out]

    A pointer to the buffer to receive the user's logon name. If this buffer is not large enough to contain the entire user name, the function fails. A buffer size of (UNLEN + 1) characters will hold the maximum length user name including the terminating null character. UNLEN is defined in Lmcons.h.

    Im übrigen reicht ein einziges Satzzeichen. Man muss nicht immer drei hinschreiben, sowas nervt nur beim Lesen. Es kommt sehr kindisch rüber.

    Grüssli



  • ohh jawoll ! DAAANKE ! vielen vielen dank das ihr mir geholfen habt ! Echt Klasse dieses Forum ! es gibt nur noch eine Funktionsbeeinträchtigung : Das Kopieren des Bildes Funktioniert nicht ! Da sProggi läuft fehlerfrei durch jedoch wird das bild einfach nciht kopiert ! auch als ich den pfad gekürzt hab : (von C:/ordner/bild.jpg nach C:/bild.jpg) passierte nichts ! wenn ich textdateien kopieren will klappt es auch nicht . Was kann man da machen ?



  • Ohne mir deinen Code im Detail angesehen zu haben:

    Du solltest den Rückgabewert von CopyFile checken, und wenn der FALSE ist, dann musst du GetLastError benutzen, um Genaueres über den aufgetretenen Fehler zu bekommen. Grundsätzlich solltest du immer darauf achten, was Funktionen dir an Informationen über ihren (Miss-)Erfolg liefern.



  • oh mann google bringt nichts deswegen : Wie baue ich getlasterror in meinen code ein ?


  • Administrator

    Dravere schrieb:

    Und natürlich sollte man bei den WinAPI Funktionen noch überprüfen, ob sie erfolgreich waren oder nicht.

    ...

    FedoX schrieb:

    oh mann google bringt nichts deswegen : Wie baue ich getlasterror in meinen code ein ?

    Google bringt schon was, bzw. am besten bei der WinAPI, geht man natürlich in der MSDN suchen:
    CopyFile
    GetLastError

    Und wenn wir schon dabei sind, deine Satzzeichensetzung zu verbessern. Man muss zwischen dem Wort vor dem Satzzeichen und dem Satzzeichen selber keinen Abstand einfügen. Zudem solltest du auch das Ausrufezeichen weniger verwenden. Du rufst schliesslich im Alltag auch nicht bei jedem Satz aus, oder doch? 🙂

    Grüssli



  • FedoX schrieb:

    oh mann google bringt nichts deswegen : Wie baue ich getlasterror in meinen code ein ?

    Google bringt garantiert genug zu GetLastError, genau wie msdn.com!

    Du erzeugst einfach eine DWORD-Variable und weist ihr den Rückgabewert von GetLastError zu. Die Funktion braucht auch gar keine Argumente, ist also wirklich einfach zu bedienen. Der Aufruf muss aber direkt hinter CopyFile passieren. Den Error-Code, den du erhälst, kannst du in der Hilfe nachschlagen, oder mit einer Funktion (war das GetErrorText oder so?) in einen ausgeschriebenen Fehlertext verwandeln.

    EDIT: Hehe, die heißt natürlich nicht GetErrorText (wär' ja auch zu einfach 😉 ), sondern FormatMessage...



  • Er sagt Fehler 5.Damit kann ich nichts anfangen und wenn ich bei goggle fehlercode sucxhe bringt nichts ! FormatText kann ich auch nicht wirklich einbauen.Könnte mir jemand ein code Beispiel geben ?


  • Administrator

    FedoX schrieb:

    Er sagt Fehler 5.Damit kann ich nichts anfangen und wenn ich bei goggle fehlercode sucxhe bringt nichts ! FormatText kann ich auch nicht wirklich einbauen.Könnte mir jemand ein code Beispiel geben ?

    Liest du überhaupt die Links, welche man dir gibt? Unter dem Link für GetLastError, gibt es einen weiterführenden Link zu System Error Codes. Dort hast du unter Fehler 0x5 den folgenden Text: ERROR_ACCESS_DENIED -> Access is denied.

    Allenfalls, wenn du die Seite von GetLastError richtig gelesen hättest, hättest du auch diese Seite gefunden: FormatMessage.

    Du hast alle Informationen, welche du benötigst. Lies das Zeug!

    Grüssli



  • FedoX schrieb:

    FormatText kann ich auch nicht wirklich einbauen.Könnte mir jemand ein code Beispiel geben ?

    Da in der MSDN sogar unter "FormatMessage" ein Beispiel steht: nein.

    Der Fehler besagt aber nichts anderes als ERROR_ACCESS_DENIED und ist ebenso in der MSDN zu finden (genau hier).

    Etwas mehr Eigeninitiative darf man durchaus erwarten.



  • FedoX schrieb:

    Er sagt Fehler 5.Damit kann ich nichts anfangen und wenn ich bei goggle fehlercode sucxhe bringt nichts ! FormatText kann ich auch nicht wirklich einbauen.Könnte mir jemand ein code Beispiel geben ?

    Wer hat was von FormatText gesagt?

    Beispiele gibt's, wenn du den bereits geposteten Links folgst. Z.B.:

    http://msdn.microsoft.com/en-us/library/ms680582(VS.85).aspx

    Hier sind die Error Codes, auch nicht schwer zu finden:

    http://msdn.microsoft.com/en-us/library/ms681381(VS.85).aspx

    Du musst lernen, richtig nach Informationen zu suchen. Das ist das A und O beim programmieren, ernsthaft. Tippen kann jeder, aber autodidaktisch voran kommen und Probleme selbstständig lösen, dass sind Kernpunkte, die das Programmieren ausmachen.



  • ja das hör ich nicht das erste mal.Die Links hab ich alle durchgesucht aba ebend nicht das gefunden was ich gerne hätte! Da ich englisch nciht so wirklich gut kann fällt mir sowas auch nicht sofort ins Auge ! Danke für die Links jetzt ! Ich frage mich nur warum mir der zugrif verweigert wird ?



  • FedoX schrieb:

    Da ich englisch nciht so wirklich gut kann fällt mir sowas auch nicht sofort ins Auge

    Daran solltest du, wenn möglich, arbeiten. Gerade bei C/C++ ist das eigentlich eine Grundvoraussetzung. Man muss ja auch nicht den kompletten Sprachumfang beherrschen, aber die grundlegende Grammatik (zumindest grob) und die wichtigen Fachbegriffe sollte man sich mal 'reinziehen. Ich würde dir zumindest empfehlen, nicht verstandenes nicht einfach zu überfliegen, sondern alle unbekannten Wörter auf http://dict.leo.org/ oder sonstwo nachzuschlagen.


Anmelden zum Antworten