2016-05-01 10 views
0

ここに私の問題を示す簡単なプログラムがあります。 文字配列へのポインタをfunctionAに渡す関数functionBがあります。 functionAは、値を見つけて文字配列に格納します。文字配列の内容は、文字ポインタfdateにコピーする必要があります。どうすればこれを達成できますか?文字列をCの文字ポインタにコピー

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

。 **あなたは何を達成したいのですか? [ask]を参照し、[mcve]を入力してください。 – Olaf

答えて

4

あなたは文字ポインタに文字列をコピーすることはできませんが、文字ポインタで指されたメモリブロックに文字列をコピーすることができます。あなたはこれを行うことはできません。

char *ptr; 
functionA(ptr); 

と文字列を指すようにptrを期待しています。今コピーが働くだろう

char buf[100]; 
functionA(buf); 

が、それは書き込みのために利用可能であるどのくらいのメモリを知ってないので機能は安全ではないだろう:あなたはこのように、あなたの関数に有効なメモリブロックへのポインタを渡す必要がありますバッファオーバーランが発生する可能性があります。より良いアプローチは、バッファと共にバッファのサイズを渡すことである。

functionA(buf, sizeof(buf)); 

別の方法は、ポインタへのポインタを渡し、関数は動的に文字列を割り当てることです。しかし、この場合には、呼び出し側は、その使用後にメモリを解放する責任があります:あなたは確かにポインタに配列をコピーしたくない

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

私はFunctionBのコードサンプルも追加しました。この場合、助けてください –

+0

@shim_mang 'FunctionB'の何が問題なのですか?私は、 "文字配列の内容は文字ポインタfdateにコピーされ、functionBでグローバルにアクセスする"ステートメントでは "グローバルにアクセス"を理解していません。 – dasblinkenlight

関連する問題