2016-04-08 6 views
-1

はまず、ここではCのコードです:Cで関数内の文字列のサイズを調べる方法は?私が説明する前に

#include <stdio.h> 

void printSize(char* str); 

int main() 
{ 
    char a[100] = "StackOverflow"; 
    printSize(a); 
    return 0; 
} 

void printSize(char* str) 
{ 
    int n = sizeof(str)/sizeof(char); 
    printf("%d" ,n); 
} 

あなたはすでに100は、私が割り当てられているサイズであるように、私は「100」の値を印刷するには、私の機能を取得しようとしています見ることができるように私のcharアレイaに。しかし私は私の答えとして8を得ています。今私はなぜポインタのサイズを印刷しているので、私はここで8になっているのか知っています。だから私の質問は、私は "100"の値を印刷するためにこのメソッドを使用することができない場合、私はaに割り当てられたメモリを関数内から見つけることができますか?あなたがstrlen機能を使用し、文字列の長さを取得するには

おかげ

+2

簡単な方法では見つかりません。通常は、配列のサイズを示す 'int size'という関数に別のパラメータを追加します。 – atturri

+0

[Cでの文字配列の長さの検索](0120-18753) –

+0

基本的にC言語で行う方法はありませんか? – theprogrammer094

答えて

3

配列のサイズを取得するには、引数として渡す必要があります。

ポインタのサイズを取得すると、実際のポインタのサイズが取得され、ポインタのサイズは取得されません。あなたの場合、ポインターが64ビット(8バイト)の64ビットプラットフォーム上にあるように見えますが、sizeof(char)(常に1と定義されています)で除算すると、値8が得られます。

+3

'strlen()'の '#include 'です。 – jdarthenay

+0

ええと私はstrlenについて知っているし、出力として8を得た理由は分かっていますが、私の関数で3番目のパラメータを追加せずに、割り当てられたメモリに余分なintバイトを追加しないと、サイズ? – theprogrammer094

+0

@ rohitkrishna094いいえ、方法はありません。配列がポインタに壊れた後は、ポインタだけがポインタになり、コンパイラが配列に対して持っていたすべての意味情報が失われてしまいます。 –