Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: linuxuser am 17. March 2005, 15:10
-
hi leute ich habe eine frage und zwar bei diesem codeteil:
void print(char eing){
char *Text = eing;
char *VideoMem = (char*)0xB8000;
while(*Text){
*VideoMem = *Text;
*VideoMem++;
*VideoMem = 7;
*VideoMem++;
*Text++;
line++;
}//end while
}//end outp
int main(void){
print("aaaaaaaaaaaaaaaaaa");
}//end main
passiert gar nichts was ist hier das problem??? ich glaube hier zeigt der pointer nicht auf die richtige stelle im speicher, aber wie kann ich das loesen??
der compiler gibt mir bei der besagten zeile (wo ich den pointer auf die variable eing zeigen lasse) aus
warning: initialization makes pointer from integer without a cast
das sagt mir das die variable keine besetzung hat aber ich habe keinen plan wie ich das machen koennte damit dieser code funzelt
-
Hi,
char *Text = eing;
ist falsch, du versuchst einem Zeiger einen int Wert zuzuweisen
Machs so:
char *Text = &eing;
Gruß GhostCoder
-
Hi,
GhostCoder: das wäre zwar richtig, wenn man nur die funktionsdeklaration anschaut, aber im aufruf sieht man, dass eine zeichenkette übergeben wird.
die funktionsdeklaration ist also falsch. es muss void print(char* eing) heissen
VideoMem sollte global sein, damit du nicht bei jeden aufruf von print() wieder oben links mit der ausgabe anfängst, sondern die position gespeichert wird.
char *VideoMem = (char*)0xB8000;
void print(char* eing) { // eing ist ein zeiger auf eine zeichenkette, deswegen char*
char *Text = eing;
while(*Text){
*VideoMem = *Text;
VideoMem++; // wir verändern den zeiger, nicht den wert in VideoMem[0] (das * muss weg)
*VideoMem = 7;
VideoMem++; // das * muss weg. siehe oben
Text++; // das * muss weg. siehe oben
line++; // <---- was bedeutet das?
}//end while
}//end outp
wenn dir das mit den *foo zu kompliziert wird schreib einfach foo[0], wenn du was in den speicher schreiben willst und foo wenn du den zeiger verändern willst.
merke: *VideoMem bedeutet das gleiche wie VideoMem[0]
edit: woher kommt diese komische funktion? die hab ich doch schon mal hier gesehen. mit ähnlichen (oder genau den gleichen?) fehlern. wie wärs mal mit einem Tutorial über Pointer in C in der nächsten Ausgabe oder in der Tutorialsammlung?
-
Ja, so ein Tut wäre ziemlich praktisch...
Die Funktion kommt hier (http://www.jay-code.de/scripts/htmlgenerator.php?page=ckernel&directory=tutorials) her.
-
STIMMT
du hast recht ich kaufe mir(es ist schon bestellt) das buch "c von a bis z" dann zieh ich mir c so rein, dass mir keine solchen fehler mehr passieren... dann brauche ich euch nicht mehr mit solchen lapalien mehr belaestigen 8) trotzdem thx fuer die hilfe