- 締切済み
[C言語] 関数の配列引数の扱いについて
C言語習得中の文系学生です。現在、データ構造(リンクリスト、ツリー構造)を勉強中です。 勉強用にプログラムを組んでるのですが、構造体メンバに文字列を代入し出力する関数で予想とは違う結果が出てしまいました。思いつく限りの方法は試しましたが、状況は変わりませんでした。 先に、予想した実行結果と実際の実行結果を載せます。 char型配列data[32]に入力文字列を代入し出力した時 ・予想した結果 入力: abcdefgh 出力: abcdefgh ・実際の結果 入力: abcdefgh 出力: abc 次にコードと実行結果を載せます。 上記の通り、与えられた文字をそのまま出力するだけのプログラムです。 質問投稿用にメンバの量は1つにしました。 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<malloc.h> #define MAX_DATA 32 struct memb{ char s[MAX_DATA]; }k; void input_c(char *data){ data = (char *)malloc( sizeof(char)*32 ); printf("Size is %d\n",malloc_usable_size(data)); puts(">>> "); fgets(data,sizeof(data),stdin); sscanf(data,"%s",data); printf("DATA is %s\n",data); } int main(void){ input_c(k.s); printf("Inputted Data : %s\n",k.s); return 0; } -------------------------------------------- 実行結果 Size is 36 >>> abcdefgh DATA is abc Inputted Data : 以上です。 こういう状態になってしまう原因がどこにあるのか、何がそうさせているのかについて、 どうかご教授のほど宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- Wr5
- ベストアンサー率53% (2173/4061)
- TooManyBugs
- ベストアンサー率27% (1472/5321)
- Tacosan
- ベストアンサー率23% (3656/15482)
- Tacosan
- ベストアンサー率23% (3656/15482)
お礼
>dataはmallocしたバッファへのポインタであってバッファそのものではないからsizeof(data)はバッファ長ではなくポインタのサイズ。 全くその通りです・・・ありがとうございました!!