Avatar billede nameless Nybegynder
02. december 2003 - 14:57 Der er 6 kommentarer og
1 løsning

Hvor er fejlen?

#include <string.h>
#include <windows.h>

using namespace std;

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    char *cWinDir = getenv("windir"); //path
    strcat(cWinDir,"system/TheTest.exe"); //include the end path and the exefilename

    return 0;
}
/*Jeg får ingen fejl når jeg compiler (borland), men når jeg kører den melder den fejl efter programmet er færdigt. Altså hvis jeg sætter fx en messagebox ind efter strcat kommer den også, men i slut kommer fejlen (forsvinder hvis jeg fjerner strcat). */
Avatar billede erikjacobsen Ekspert
02. december 2003 - 15:00 #1
Du overskriver ikke allokeret RAM. Din getenv giver dig en streng præcis
så lang, som nødvendigt, og du sætter mere bagved, dvs i RAM du ikke aner
hvad er.
Avatar billede nameless Nybegynder
02. december 2003 - 15:28 #2
Du havde ret.. Sådan havde jeg ikke tænkt på det.
Her er koden der virker:

#include <string.h>
#include <windows.h>

using namespace std;

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    char cWinDir[1024];
    strcat(cWinDir,getenv("windir")); //path
    strcat
    strcat(cWinDir,"system/TheTest.exe"); //include the end path and the exefilename

    return 0;
}

smid et svar og få dine points :)
Avatar billede nameless Nybegynder
02. december 2003 - 15:29 #3
smuttede lige et ekstra strcat i midten :P
Avatar billede erikjacobsen Ekspert
02. december 2003 - 15:32 #4
Det er en go' løsning. Så længe det ikke overstiger 1023 tegn ;)
(Nu ved du lidt om nogle af sikkerhedshullerne i diverse OS-er)
Avatar billede erikjacobsen Ekspert
02. december 2003 - 15:33 #5
Point - du lavede løsningen! Jeg frafalder.
Avatar billede segmose Nybegynder
02. december 2003 - 16:23 #6
lidt mere besværligt

char *CWinDir = new char[strlen(genenv("windir")+strlen("system/TheTest.exe")+1];

etc.
Avatar billede segmose Nybegynder
03. december 2003 - 16:56 #7
Der manglede en parantes.
char *CWinDir = new char[strlen(genenv("windir"))+strlen("system/TheTest.exe")+1];
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester