C++ Funktion will string zu char nicht

T_55

Lieutenant
Registriert
Feb. 2013
Beiträge
638
Hallo,

mit dem Code von hier http://www.online-tutorials.net/daten-ordner/die-gre-einer-datei-ermitteln/sourcecodes-t-16-14.html
möchte ich einen Dateinamen auslesen der bei mir aber per str::string vorgegeben werden soll aber er schluckt das char nicht.

Code:
DWORD GetSize(char *fname)
{  
  DWORD dwFileSize;
  HANDLE hFile;
  hFile = CreateFile(fname,GENERIC_READ,FILE_SHARE_READ,
                     NULL,OPEN_EXISTING,0,NULL);
  if(hFile == INVALID_HANDLE_VALUE){return 0;}
  
  dwFileSize = GetFileSize(hFile, NULL);            
  CloseHandle(hFile); 
  
  return dwFileSize;
}


int main()
{

  std::string a = "C:\\Prog.exe";
  const char *b = a.c_str();

  DWORD dwSize = GetSize(b);  // !!! Invalid conversion from const char* to char*

  return 0;
} 
}

Man bekommt den Fehler Invalid conversion from const char* to char*
Hat jemand eine Idee?

Grüße
 
Du hast b als const char* deklariert, das heißt, dass du die chars, auf die b zeigt, nicht verändern kannst. Du übergibst den Pointer aber an einen Funktionsparameter, der als char* deklariert ist, was verlangt, dass die chars eben doch veränderbar sein müssen. Das geht schief.

Lösung: Den Parameter fname ebenfalls als const char* deklarieren.

Nochmal ein Beispiel:
Code:
char* a = ...;      // Zeigt einfach auf irgendwas
a[0] = 'x';         // Funktioniert
const char* b = a;  // Funktioniert, da du hier nur Lesezugriff auf die Chars verlangst
b[0] = 'x';         // Funktioniert nicht, da die Chars, auf die b zeigt, const sind
char* c = b;        // Funktioniert nicht, da du Schreibzugriff auf die Chars verlangst, aber nur Lesezugriff hast
 
Im Übrigen:


Code:
HANDLE hFile;
hFile = CreateFile(fname,GENERIC_READ,FILE_SHARE_READ,
                   NULL,OPEN_EXISTING,0,NULL);

Gewöhn dir diesen Stil schnellstmöglich wieder ab. Der hat absolut Null Vorteile gegenüber diesem Stil:

Code:
HANDLE hFile = CreateFile(fname,GENERIC_READ,FILE_SHARE_READ,
                   NULL,OPEN_EXISTING,0,NULL);
 
Zurück
Oben