Autor Thema: pointer  (Gelesen 5243 mal)

linuxuser

  • Beiträge: 6
    • Profil anzeigen
Gespeichert
« 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
ARE YOU SICK OF CRASHING... USE LINUX

GhostCoder

  • Beiträge: 187
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 17. March 2005, 16:45 »
Hi,


char *Text = eing;


ist falsch, du versuchst einem Zeiger einen int Wert zuzuweisen

Machs so:

char *Text = &eing;


Gruß GhostCoder
A man, a legend!

Jidder

  • Administrator
  • Beiträge: 1 625
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 17. March 2005, 19:02 »
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?
Dieser Text wird unter jedem Beitrag angezeigt.

JG

  • Beiträge: 189
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 17. March 2005, 19:21 »
Ja, so ein Tut wäre ziemlich praktisch...
Die Funktion kommt hier her.

linuxuser

  • Beiträge: 6
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 18. March 2005, 09:57 »
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
ARE YOU SICK OF CRASHING... USE LINUX

 

Einloggen