0
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int foo(char str[])
{
char *str1=(char *)malloc(sizeof(char)*sizeof(str));
printf("\n str %s size : %zu \n",str,sizeof(str));
}
int main()
{
char str[]="[email protected]#[email protected]#$abcd";
printf("\n str %s size : %zu \n",str,sizeof(str));
foo(str);
return 0;
}
なぜ文字列の長さがmain()
とfoo()
で異なるのですか?理由:同じstr
foo
8にmain
とで長さ25を示している - これは、main
通話str
とfoo
は単純なプログラムですか?文字列のサイズがメインと関数で異なるのはなぜですか?
出力:アレイタイプchar *
のポインタに調整されているように、この関数宣言
int foo(char str[]);
で
str [email protected]#[email protected]#$abcd size : 25
str [email protected]#[email protected]#$abcd size : 8
この関数では、 'char str []'は 'char * str'と等価で、ポインタのサイズは再生している特定の文字列のサイズよりも小さくなります。 main関数では、 'str'は配列で、' sizeof'は配列のサイズを報告します。これは、 'sizeof(str)== strlen(str)+ 1'を意味する終端ヌルバイトを含みます。 ) '。 ( 'foo()'のメモリがリークすることに注意してください。) –
が役に立ちます:http://www.c-faq.com/aryptr/index.html – yano