2016-05-01 8 views
0

Hier ist ein einfaches Programm, um mein Problem zu demonstrieren. Ich habe eine Funktion functionB, die Zeiger an ein Zeichen-Array zu functionA übergibt. functionA findet den Wert und speichert ihn in einem Zeichen-Array. Der Inhalt des Zeichenarrays sollte in den Zeichenzeiger fdate kopiert werden. Wie kann ich das erreichen?Zeichenkette in Zeichenzeiger in C kopieren

int functionB() { 
    char fdate[20]; 
    functionA(&fdate[0]); 
    return 0; 
} 

int functionA(char *fdate) { 
    char date[20] = "20 May 2016"; 
    strcpy(fdate, date); 
    return 0; 
} 
+0

Sie wollen sicherlich kein Array in einen Zeiger kopieren. Was ** genau ** willst du erreichen? Sehen Sie [ask] und stellen Sie [mcve] bereit. – Olaf

Antwort

4

Sie können nicht eine Zeichenfolge in einen Zeichenzeiger kopieren, aber man kann durch ein Zeichen Zeiger auf einen String in einen Speicherblock zeigte kopieren. Sie können dies nicht tun:

char *ptr; 
functionA(ptr); 

und erwarten ptr auf die Zeichenfolge zu verweisen. Sie benötigen einen Zeiger auf einen gültigen Speicherblock in Ihrer Funktion zu übergeben, wie folgt aus:

char buf[100]; 
functionA(buf); 

Nun ist die Kopie funktionieren würde, aber die Funktion unsicher sein würde, weil sie nicht wissen würde, wie viel Speicher zum Schreiben verfügbar ist seine Zeichenfolge und könnte Pufferüberläufe verursachen. Ein besserer Ansatz ist es, die Größe des Puffers zusammen mit dem Puffer übergeben:

functionA(buf, sizeof(buf)); 

Eine weitere Alternative ist ein Zeiger auf Zeiger zu übergeben, und die Funktion haben, den String dynamisch zuzuteilen. In diesem Fall ist der Aufrufer jedoch für die Freigabe des Speichers nach dessen Verwendung verantwortlich:

char *ptr; 
functionA(&ptr); 
... 
free(ptr); 
... 
int functionA(char **fdate) { 
    char date[20] = "20 May 2016"; 
    *fdate = malloc(sizeof(date)); 
    memcpy(*fdate, date); 
    return 0; 
} 
+0

Ich habe auch Codebeispiel für FunctionB hinzugefügt. Bitte helfen Sie mir in diesem Fall –

+0

@shim_mang Was ist los mit 'FunctionB'? Ich verstehe nicht "global Zugriff" in der "Der Inhalt der Zeichenarray sollte in Zeichen Zeiger fdate für den globalen Zugriff in der FunktionB" Anweisung kopiert werden. – dasblinkenlight

Verwandte Themen