MFK schrieb:
_matze schrieb:
Wenn nicht, dann hast du es nicht so gemacht, wie in deinem Beispiel...
Vermutlich stand da eigentlich
#define ACCEPT 0x00;
Klar, das wird es gewesen sein. Dann macht die Fehlermeldung auch Sinn...
Hunterson schrieb:
Kann ich die Größe der Konsole verändern? Ohne die IC-Console. Geht das irgendwie?
SetConsoleWindowInfo
Hunterson schrieb:
Vollbild funktioniert bei mir nämlich nicht...
Welche Windowsversion? Unter Vista wird's wohl am Grakatreiber liegen - funktioniert mit den wenigsten.
cheers, Swordfish
hmm ja das ganze als String einzulesen hab ich mir auch schon gedacht. Das komische is, das wir das eigentlich noch nicht hatten (is fuer die uni) d.h. es muesste auch irgendwie einfacher gehen....?
ok so könnte es gehen:
Leider kann ich es erst am Mo testen.
BYTE* pData;
DWORD dwLength;
dwLength=4;
pData = (BYTE*)calloc(1,dwLength);
pData[0] = (BYTE)CHECK_REQ;
pData[1] = (BYTE)0x03;
pData[2] = (BYTE)ID;
pData[3] = (BYTE)0x01;
pData[4] = (BYTE)0x10;
dwRet = Send(pData, dwLength);
free(pData);
Verbessert mich bitte falls ihr einen Fehler entdeckt.
Danke
Zudem ist diese Funktion ineffektiv. pow ist
1. teuer
2. ungenau
Beides durch die Nutzung von floating point operations.
Besser und effektiver wäre so etwas:
unsigned short int getDigit (long int num, unsigned short int digit)
{
while (num && digit--)
num /= 10;
return num % 10;
}
Just my 2 cents! :xmas1:
Also die Lösung von bigmek funktioniert einwandfrei, danke dafür.
Hab jetzt trotzdem eine andere Möglichkeit gefunden, ohne ein neues Fenster öffnen zu müssen...
thx @ all.
Habt mir mit euren Anregungen echt super weitergeholfen
*Thread geschlossen*
Wozu braucht man da ueberhaupt ein Tutorial? Entweder du kannst C und C++ programmieren oder du kannst es nicht. Da spielt doch das BS keine so grosse Rolle.
Was du zum Einstieg brauchst ist eigentlich nur ein Compiler (bringt idR. di passenden std libs mit) und Linker, die DOS-Programme erstellen koennen (kann zB. der watcom). Dass DOS-Programme ab Win2k ohne extra Emulatoren wie DOSBox nicht oder nicht mehr besonders gut laufen, sollte auch klar sein.
Ansonsten brauchst du erstmal eigentlich nur beachten, dass du natuerlich weil wegen DOS anderes Betriebssystem als Windows keine Libs fuer Windows und idR. auch anderes APIs benutzen musst. Fuer Spielereien wie Soundausgabe, die nicht ueber den PC-Speaker laeuft, Grafik und Maus brauchst du zB. extra Libs, die eigene Hardwaretreiber enthalten usw.
Ich schreibe zurzeit ein kleines Verschlüsselungsprogramm für .txt - Dateien, doch ich habe das Problem, dass ich die Ursprungsdatei(=startdatei) nicht lesen lässt. Es wird immer als Wert NULL zurückgegeben, egal, wie ich es mache. Muss man mit Vista es irgendwie anders machen (mit xp hat es immer funktioniert).
\E: Ich benutze Code::Blocks mit dem GNU GCC Compiler
\E²: Die txt-Datein sind auch im selben verzeichniss
void dateipruefung(char *name)
{
int laenge;
char *zeiger;
zeiger = strstr(name, ".txt");
if(zeiger==NULL)
{
laenge = strlen(name);
if(laenge>16)
{
*(name+16) = '.';
*(name+17) = 't';
*(name+18) = 'x';
*(name+19) = 't';
*(name+20) = '\0';
}
else
{
*(name+laenge) = '.';
*(name+laenge+1) = 't';
*(name+laenge+2) = 'x';
*(name+laenge+3) = 't';
*(name+laenge+4) = '\0';
}
}
}
[...]
char verfahren[verf_laenge];
char pufferV[verf_laenge];
char *alphabetzeiger[verf_laenge-1];
char *dyn_speicherzeiger;
char pruefung;
char dateiname[21];
char puffer[21];
long dateigroesse;
int i = 0;
FILE *startdatei;
FILE *zieldatei;
[...]
do
{
printf("Geben sie die Quell-textdatei ein, die verschluesselt\n");
printf("werden soll\n");
fgets(puffer, sizeof(puffer), stdin);
sscanf(puffer, "%s\n", dateiname);
dateipruefung(dateiname);
startdatei = fopen(dateiname,"rb");
if(startdatei==NULL)
{
printf("\t|%s| nicht gefunden.\n\n", dateiname);
}
}while(startdatei==NULL);
[...]
\E: Scheinbar lag es an Windows nach einer Defragmentierung hat es plötzlich funktioniert... xD
Habe eine Klasse Matrix geschrieben, die folgendermaßen aussieht:
class CZeile
{
protected:
double *z;
int size;
public:
~CZeile(void) {delete [] this->z};
CZeile(int s){this->size = s; this->z = new double[s];}
}
class CMatrix:public CZeile
{
protected:
CZeile **mat; //Zeiger auf "Zeilen"-Vektor
int lines, cols; //Zeilen- und Spaltenzahl
public:
~CMatrix(void)
{
for (int i = 0; i < this->lines; i++)
{
delete this->mat[i];
}
delete[] this->mat;
}
CMatrix(int z, int s, double wert)
{
this->lines = z;
this->cols = s;
this->mat = new CZeile*[this->lines]; //Vektor fuer Zeiger auf Zeilenvektoren
int i, j;
for (i = 0; i < this->lines; i++) //Zeilenvektoren:
{
this->mat[i] = new CZeile(this->cols); //Speicher reservieren
for (j = 0; j < this->cols; ++j)
{
(*this)[i][j] = wert; //und Werte kopieren
}}}
}
Soweit so gut, Matrix anlegen und damit arbeiten funktioniert alles, aber wenn ich im Debugmodus das Programm beenden möchte und den Destruktor aufrufe, kommt folgende Fehlermeldung:
Eine Ausnahme (erste Chance) bei 0x7c97d811 in test21.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xfffffff9.
Eine Ausnahme (erste Chance) bei 0x7c97d811 in test21.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xfffffff9.
Eine Ausnahme (erste Chance) bei 0x7c97d811 in test21.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xfffffffa.
Eine Ausnahme (erste Chance) bei 0x7c97d811 in test21.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xfffffffa.
Eine Ausnahme (erste Chance) bei 0x7c97d811 in test21.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xfffffffb.
Eine Ausnahme (erste Chance) bei 0x7c97d811 in test21.exe: 0xC0000005: Zugriffsverletzung-Leseposition 0xfffffffb.
HEAP[test21.exe]: Invalid Address specified to RtlFreeHeap( 00030000, 7C958FB7 )
Unbehandelte Ausnahme bei 0x7c91120e in test21.exe: Benutzerhaltepunkt.
Das Programm "[2496] test21.exe: Systemeigen" wurde mit Code 0 (0x0) beendet.
Habe schon herausgefunden, dass die Adresse 7C958FB7 das Element mat (also bei delete[] this->mat) ist. Dann wird der Destruktor von CZeile aufgerufen und es knallt.
Programmier noch nicht so lang, vielleicht kann mir das jemand erklären?? Versteh soweit schon, dass ich auf Speicher zugreife, den es offensichtlich nicht mehr gibt, aber wo in meinem Code soll der Fehler liegen?