OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

プロンプト入力 malloc( )

  • 暇なときにでも
  • 質問No.224110
  • 閲覧数67
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 59% (194/328)

#include <iostream.h>

void f(char* str);

main(){
char s[8] = "\0";
cout << "文字を入力" << '\n';
fgets(s, 8, stdin);
f(s);
}

void f(char* str){
char* c;
c = (char*)malloc(sizeof(char) * strlen(str)+1);
cout << strlen(str) << '\n';
cout << sizeof(c);
free(c);
}

- 結果 -
文字を入力 ( a、Ctrl+Z )
a
1
4

でした。

cout << sizeof(c);

の結果は4でした。1バイトの入力だから\0を含めて
2バイトを確保したかった。
そのためにはどうしたらいいんですか?
どうして4だったんですか?

文字を入力するとこで、Ctrl+Z の代わりに Enter を押すと
Enter まで s に格納されてしまう。
cin を使うと8バイト以上の入力でも s に格納されてしまう。
そうならないためのよい方法があったら教えてください。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.1
レベル12

ベストアンサー率 48% (325/664)

>1バイトの入力だから\0を含めて2バイトを確保したかった。
>そのためにはどうしたらいいんですか?
安心してください。この方法で2バイト分のメモリ領域が確保できています。

>どうして4だったんですか?
cはcharポインタ型変数だからです。
ポインタ型のサイズは元の変数の型によらず一定値となります。

半分しか答えていないので自信は「なし」とさせていただきます。
お礼コメント
A__

お礼率 59% (194/328)

ありがとうございます。
4はポインタのサイズだったんですね。
cout << sizeof(*c);
で分かりました。
投稿日時 - 2002-02-24 18:31:33
-PR-
-PR-

その他の回答 (全1件)

  • 回答No.2

>1バイトの入力だから\0を含めて 2バイトを確保したかった。 >そのためにはどうしたらいいんですか? >どうして4だったんですか? 2バイト確保されているはずですよ。 実際に、sizeof(char) * strlen(str)+1 の値を出力されると、 2バイトになっていませんか? ポインタcには、確保したメモリ領域の先頭アドレス番地が格納されているので si ...続きを読む
>1バイトの入力だから\0を含めて 2バイトを確保したかった。
>そのためにはどうしたらいいんですか?
>どうして4だったんですか?

2バイト確保されているはずですよ。
実際に、sizeof(char) * strlen(str)+1 の値を出力されると、
2バイトになっていませんか?
ポインタcには、確保したメモリ領域の先頭アドレス番地が格納されているので
sizeof(c)では、確保したメモリの大きさではなく、
ポインタc自体のバイト数が表示されているのです。
実際にcの値を表示してみると分かると思います。



>文字を入力するとこで、Ctrl+Z の代わりに Enter を押すと
>Enter まで s に格納されてしまう。
>そうならないためのよい方法があったら教えてください。

fgetsを使うと、復改文字が残るのは当然です。
gets(s)等を使うと手軽だと思います。
ただ、s[8]を超えない処理が必要です。
お礼コメント
A__

お礼率 59% (194/328)

sizeof(char) * strlen(str)+1
の値を出力されると2バイトになりました。

入力決定時の Enter については未解決だけど
1番知りたかった4の疑問が解決してよかったです。
ありがとうございました。
投稿日時 - 2002-02-24 18:31:39


このQ&Aのテーマ
このQ&Aで解決しましたか?
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ