Hallo,
Ik ben bezig met een beetje C++ voor mezelf. Gewoon voor de lol, om de taal een beetje te leren kennen. Heb er dan ook nog geen ervaring in, en het is eigenlijk het eerste wat ik ooit gemaakt heb in C++.
Nu heb ik een class gemaakt om wat karakters op het scherm te gooien. Dat klinkt simpel genoeg, en dat is het eigenlijk ook, maar ik wilde de karakters op specifieke plekken in de console gooien (dus op een bepaald coördinaat). Dat zag er ongeveer zo uit:
Dat deed zijn werk prima. Omdat ik in het uiteindelijke script wat vaker WriteFile aanriep (een stuk of 8 keer waartussen ik steeds de positie van de cursor verander), leek het me handig om een soort wrapper te maken. De class definitie werd toen zo:
En de nieuwe functie zag er zo uit:
Nu gaat dat niet helemaal zoals ik verwacht had. De boel draait nog, alleen print hij er een aantal extra karakters bij. Volgens mij zijn die karakters die te zien zijn een poging van de console om de null characters die nog in de array van characters staan te weergeven.
Mijn probleem is nu als volgt: Ten eerste snap ik niet hoe het kan dat die array groter is. Ik dacht dat het misschien kwam omdat ik de groote niet aangaf bij de functie, maar zelfs als ik dat expliciet wel doe dan blijven de karakters. Echter, zelfs als die karakters er zijn (en dus null characters in de array) zou hij deze volgens mij niet moeten laten zien, het derde argument van WriteFile geeft aan hoeveel bytes hij weg moet schrijven en ik geloof dat strlen stopt bij het eerste null character, dat zou toch betekenen dat hij de laatste null characters niet gaat proberen te printen?
EDIT:
Ik geloof dat ik het heb. Het komt blijkbaar door het uitblijven van een null character. Als die er niet is dan gaat strlen blijkbaar raar doen. Zit wel wat in.
Ik ben bezig met een beetje C++ voor mezelf. Gewoon voor de lol, om de taal een beetje te leren kennen. Heb er dan ook nog geen ervaring in, en het is eigenlijk het eerste wat ik ooit gemaakt heb in C++.
Nu heb ik een class gemaakt om wat karakters op het scherm te gooien. Dat klinkt simpel genoeg, en dat is het eigenlijk ook, maar ik wilde de karakters op specifieke plekken in de console gooien (dus op een bepaald coördinaat). Dat zag er ongeveer zo uit:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| class Test { HANDLE hOutput; COORD cursorPos; public: Test(); void WriteCharacters(); }; Test::Test() { hOutput = GetStdHandle(STD_OUTPUT_HANDLE); } void Test::WriteCharacters() { char verylongline[50]; DWORD BytesWritten; for (int i = 0; i < 50; i++) verylongline[i] = char(219); WriteFile(hOutput, verylongline, 50, &BytesWritten, NULL); } int main() { Test t; t.WriteCharacters(); return 0; } |
Dat deed zijn werk prima. Omdat ik in het uiteindelijke script wat vaker WriteFile aanriep (een stuk of 8 keer waartussen ik steeds de positie van de cursor verander), leek het me handig om een soort wrapper te maken. De class definitie werd toen zo:
C++:
1
2
3
4
5
6
7
8
| class Test { HANDLE hOutput; COORD cursorPos; int Write(const char data[]); public: Test(); void WriteCharacters(); }; |
En de nieuwe functie zag er zo uit:
C++:
1
2
3
4
5
6
7
8
| int Test::Write(const char data[]) { DWORD BytesWritten; WriteFile(hOutput, data, strlen(data), &BytesWritten, NULL); return (int)BytesWritten; } |
Nu gaat dat niet helemaal zoals ik verwacht had. De boel draait nog, alleen print hij er een aantal extra karakters bij. Volgens mij zijn die karakters die te zien zijn een poging van de console om de null characters die nog in de array van characters staan te weergeven.
Mijn probleem is nu als volgt: Ten eerste snap ik niet hoe het kan dat die array groter is. Ik dacht dat het misschien kwam omdat ik de groote niet aangaf bij de functie, maar zelfs als ik dat expliciet wel doe dan blijven de karakters. Echter, zelfs als die karakters er zijn (en dus null characters in de array) zou hij deze volgens mij niet moeten laten zien, het derde argument van WriteFile geeft aan hoeveel bytes hij weg moet schrijven en ik geloof dat strlen stopt bij het eerste null character, dat zou toch betekenen dat hij de laatste null characters niet gaat proberen te printen?
EDIT:
Ik geloof dat ik het heb. Het komt blijkbaar door het uitblijven van een null character. Als die er niet is dan gaat strlen blijkbaar raar doen. Zit wel wat in.
[ Voor 3% gewijzigd door Patriot op 20-11-2008 20:15 ]