wieder mal C-pointer^^
bleicher
- programmiertechnik
0 steckl0 bleicher0 Hopsel0 steckl
0 Vinzenz Mai
Grüße,
ich will mich an dieser stelle noch bei allen die bei der "große-zahlen-frage" halfen bedanken ;)
stehe aber wieder mal vor einer verständnissfrage -
die genialen aufgabenmacher schrieben nun vor, dass array in einer externen function initialisiert wird, die idee war - ich defineire in der main einen pointer auf ein string, und gebe den an eine 2e funktion die über malloc den nötigen speicher reserviert und den pointer darauf richtet.
nur scheint die syntax zu hinken -
char *text;
initArray(text,i);
ist falsch - "text wird benutzt ohne initailisert zu sein"
initilaisiere ich den mit NULL, gibts kritische fehler nach
void initArray(char *text, int size){
int i=100;
text=(char*)malloc(size+1);
}
void readText(char *text){
gets(text);<----exakt hier bockt es - denn text bleibt "BadPt"?
}
Fehlermeldung besagt "Expression:(String!=NULL)"
auf hinweise würde ich mich freuen^^
MFG
bleicher
Hi,
nur scheint die syntax zu hinken -
Nein, das liegt nicht an der Syntax, sondern am Verständnis.
Entweder du verwendest einen Pointer auf einen Pointer, oder du gibst den Pointer mit return zurück.
Weil wenn du so wie momentan die Funktion initArray() aufrufst wird *text in main() nicht verändert und zeigt nach wie vor auf eine zufällige Speicheradresse (weil nicht initialisiert) und nicht auf den extra reservierten Speicher.
mfG,
steckl
Grüße,
Entweder du verwendest einen Pointer auf einen Pointer, oder du gibst den Pointer mit return zurück.
die funktionen MÜSSEN "void" sein :(
zeiger übergibt man doch mit &?
aber
initArray(&text,i);
führt zu
error C2664: 'initArray' : cannot convert parameter 1 from 'char **__w64 ' to 'char *'
MFG
bleicher
Hi bleicher!
error C2664: 'initArray' : cannot convert parameter 1 from 'char **__w64 ' to 'char *'
Logisch, es wird ja auch ein Zeiger auf einen Zeiger auf ein char erwartet.
Also: void readText(char **text)
Ich hoffe, ich hab jetzt keinen Mist erzählt. =)
MfG H☼psel
Hi,
Logisch, es wird ja auch ein Zeiger auf einen Zeiger auf ein char erwartet.
Also: void readText(char **text)
In dem Beispiel ist es initArray() und nicht readText(), aber das mit den ** stimmt so. Beim Aufruf von readText() reicht dann ein einfacher Zeiger.
Ich habe noch eine gute Erklärung zu dem Thema gefunden, in dem auch fast die gleiche Funktion wie bleichers initArray() vorkommt.
Wenn man das alles verstanden hat darf man sich 2-Sterne-Programmierer nennen. ;)
mfG,
steckl
Hallo,
» Entweder du verwendest einen Pointer auf einen Pointer, oder du gibst den Pointer mit return zurück.
die funktionen MÜSSEN "void" sein :(
bitte Randbedingungen *vorher* erwähnen.
aber
initArray(&text,i);
führt zu
error C2664: 'initArray' : cannot convert parameter 1 from 'char **__w64 ' to 'char *'
Du musst natürlich diese Änderung auch bei der Funktion durchführen:
Statt:
void initArray(char* text, int size);
musst Du
void initArray(char** text, int size);
verwenden [1], wenn Du einen Zeiger auf einen Zeiger auf char übergibst.
Freundliche Grüße
Vinzenz
[1] warum ich die Notation char* text;
der Notation char *text;
vorziehe.