2017-01-13 5 views
-1

スタンドアロン関数を使用して配列に割り当てられたバイト数を取得しようとしましたが失敗しました。次のように私のコードは次のとおりです。配列を関数へのポインタとして渡してsizeof()演算子を使用する

#include <stdio.h> 

void testing(char *source); 

int main(){ 

    char a[12] = "Hello World!"; 
    //printf("%d",sizeof(a)); Prints 12. I want to get this value 
    testing(a); // Prints 4. I need to get 12 by using functions 


return 0; 
} 

void testing(char *source){ 
    printf("%d",sizeof(source)); 
} 

は、私が12となる取得したいが、出力はそれが4

+0

ポインタを使って 'sizeof'から配列のサイズを取得することはできません。 –

+0

「2 + 2を5にしたい」というようなものです。あなたはそれを "欲しがる"ことができますが、それは起こりません。 'sizeof'はこれをしません。 – AnT

+0

関数を 'void testing(char(* source)[12])'に変更し、関数で 'sizeof * source'を使用します。 –

答えて

0

は、私が12となる取得したいですと言われますが、出力は私に語りましたそれは4です。

配列が関数へのポインタとして渡されるとき、配列のサイズを取得することはできません。

void testing(char *source)の場合、sourceはポインタなので、sizeof(pointer)は4(4バイト)です。

配列パラメータがポインタに崩壊するので、関数内の配列サイズを見つける方法はありません。

+0

ありがとう!これを行う別の方法がありますか? – Abdulla

+0

サイズを明示的に一方向に渡すことはありません。 – luk32

関連する問題