char * , char[] problem
-
Halli hallo
Ich habe ein char array , char block[20]="balbalablalba";
und diesen ganzen String wollte ich dann char *buffer; übergeben.
Wie kann ich das machen ?Wenn ich char *buffer=block; mache , dann zeige ich ja mit buffer nur auf das erste Element, also block[0]- ist doch so ??
-Noch eine Frage am rande: kann ich per
char *buffer; int a,b; sprintf(buffer,"%d-%d",a,b);
diesen String an buffer übergeben ? ... weil wenn das gehen sollte dann breuchte ich das oben genannte gar nicht !
-
Wenn ich char *buffer=block; mache , dann zeige ich ja mit buffer nur auf das erste Element, also block[0]- ist doch so ??
Ja.
Es gilt aber:char block[20] = "balbalablalba"; char *pt = block; // block ist das gleiche wie &block[0] printf("%s\n", block); //--> balbalablalba printf("%s\n", pt); //--> balbalablalba // Zeiger und String sind gleichbedeutend (mit einer kleinen Ausnahme) printf("%c\n", block[1]); //--> a printf("%c\n", pt[1]); //--> a // gleichbedeutend, statt block[1] oder pt[1] kann man auch sagen: // *(block + 1) und *(pt + 1) // die kleine Ausnahme ist, dass ein String eine Grösse hat: printf("%d\n", sizeof(block)); printf("%d\n", sizeof(pt));
Wenn du ein Array (oder die Adresse vom ersten Element -- ist das gleiche) an eine Funktion übergibst, wird aus dem Array ein Zeiger und sizeof() ist dann nutzlos (zumindest um die Grösse des Arrays herauszufinden).
char *buffer; int a,b; sprintf(buffer,"%d-%d",a,b);
Keine Ahnung, ob das geht, ich weiß ja nicht, wo buffer hinzeigt, und ob du dorthin schreiben darfst.
Aber es ist ohnehin eine schlechte Idee zu schreiben und nicht zu wissen wohin, da kann alles passieren.
-
#include <stdlib.h> char block[]="blblabla"; char *buffer; buffer = malloc(sizeof(block)); buffer=block;
-
#include <stdlib.h> char block[]="blblabla"; char *buffer; buffer = malloc(sizeof(block)); buffer=block;
-
thais schrieb:
#include <stdlib.h> char block[]="blblabla"; char *buffer; buffer = malloc(sizeof(block)); buffer=block;
Damit erzeugst Du ein Speicherleck.
-
'mngbd schrieb:
// die kleine Ausnahme ist, dass ein String eine Grösse hat:
ich finde, die wichtigste ausnahme ist, dass 'block' schon der speicher selber, während 'pt' ein zeiger ist. daraus ergibt sich alles andere. man kann 'pt' z.b. woanders hinzeigen lassen, block aber nicht, usw.
-
;fricky schrieb:
'mngbd schrieb:
// die kleine Ausnahme ist, dass ein String eine Grösse hat:
ich finde, die wichtigste ausnahme ist, dass 'block' schon der speicher selber, während 'pt' ein zeiger ist. daraus ergibt sich alles andere. man kann 'pt' z.b. woanders hinzeigen lassen, block aber nicht, usw.
Verwirrend, das ganze. Ein Array ist ein Speicherbereich, es evaluiert aber in den meisten Ausdrücken zu einem Zeiger auf das, was es ist. Ausnahmen davon wären Zuweisungen, da evaluiert es gar nicht, weil man das nicht darf, und sizeof's, da evaluiert es nach eigenen Gesetzen.