2016-04-25 12 views
0

マイコード:エラーメッセージ

#include <stdio.h> 
#include <stdlib.h> 
#include <stdarg.h> 

char * callMe(char *buf_test, const char *fmt, ...) 
{ 
    va_list ap; 
    va_start(ap, fmt); 
    vsnprintf(buf_test, sizeof(buf_test), fmt, ap); 
    va_end(ap); 
    return buf_test; 
} 

int main() 
{ 
    char buf_t[100]; 
    int test_flag =1; 
    buf_t = callMe(buf_t, "Test successful : %d", test_flag); 
    printf("\n\n Result = %s", buf_t); 
} 

エラー:

error: array type 'char [100]' is not assignable 
    buf_t = callMe(buf_t, "Test successful : %d", test_flag); 
    ~~~~~^
1 error generated. 
+1

'のchar [100]'ではありません割り当て可能。 'char [100]'に代入することはできません。 –

+3

'sizeof(buf_test)'これは配列ではなくポインタのサイズを与えます。配列と関数について学んでください。 – 2501

+0

戻り値の型を 'void'に変更します。 – BLUEPIXY

答えて

1

あなたは配列に割り当てることができません。

vsnprintf(buf_test, sizeof(buf_test), fmt, ap); 

buf_testchar*としてdelcaredされ、それはサイズを返しますしそうsizeofを適用する:あなたはまた、この回線に問題を持っている

char *result = callMe(buf_t, "Test successful : %d", test_flag); 
printf("\n\n Result = %s", result); 

:あなたはこのような何かを言う必要がありますポインタの。あなたは "Test su"を取得しているので、ポインタのサイズは8バイトです。変数が配列を指していますが、コンパイラはこれを推論する方法がありません。関数にバッファ:その後、

char * callMe(char *buf_test, size_t size, const char *fmt, ...) 
{ 
    va_list ap; 
    va_start(ap, fmt); 
    vsnprintf(buf_test, size, fmt, ap); 
    va_end(ap); 
    return buf_test; 
} 

と通話作る時にサイズを渡す:

callMe(buf_t, sizeof(buf_t), "Test successful : %d", test_flag); 

それはへのアクセス権を持っているので、コンパイラは、ここで配列のサイズを考え出すことができるようになりますが変数の完全な定義。

+1

さらに、 'buf_test'が既に変更されているので戻り値も必要ありません。 –

+0

私はchar *を返さなければなりません。私の仲間から聞いたことはありますか?そのsnprintfは非常に高価な関数なので、常にchar *を返さなければなりません。 – Rock26

+0

@ Rock26 - それはあなたに割り当てられているもので問題です。なぜエラーが出るのですか? – Sean

-1

エラーが示すように、結果を配列にアサートすることはできません。

buf_t = callMe(buf_t, "Test successful : %d", test_flag); 

:代わりに、この行を変更することで、ポインタを使用することができます

char *success; 
success = callMe(buf_t, "Test successful : %d", test_flag); 

そのために、あなたのprintステートメントを変更:

printf("\n\n Result = %s", success); 
+0

すぐにお返事ありがとうございます。私は自分のコードを変更し、それは働いた。しかし、私は期待される結果を得ることができませんでした。私の出力は "Test Successful:1"の代わりに "Result = Test su"です。 – Rock26

+0

@ Rock26はおそらく 'vsnprintf(buf_test、sizeof(buf_test)、fmt、ap);行をチェックして、' buf_test'正しい値を持っていますか? – Marievi