#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 に格納されてしまう。
そうならないためのよい方法があったら教えてください。
No.1ベストアンサー
- 回答日時:
>1バイトの入力だから\0を含めて2バイトを確保したかった。
>そのためにはどうしたらいいんですか?
安心してください。この方法で2バイト分のメモリ領域が確保できています。
>どうして4だったんですか?
cはcharポインタ型変数だからです。
ポインタ型のサイズは元の変数の型によらず一定値となります。
半分しか答えていないので自信は「なし」とさせていただきます。
No.2
- 回答日時:
>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]を超えない処理が必要です。
sizeof(char) * strlen(str)+1
の値を出力されると2バイトになりました。
入力決定時の Enter については未解決だけど
1番知りたかった4の疑問が解決してよかったです。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
C++で、メンバもヒープに確保さ...
-
C言語 mallocとfreeについて
-
ヒープメモリの解放について
-
アセンブラでのメモリの動的確...
-
HEAP に関すること
-
c言語のmalloc関数と2次元配列...
-
callocの処理速度
-
C++のnewで確保したメモリーの...
-
指定したメモリアドレスの値の...
-
CreateFileMapping について
-
配列の添え字の最大数とは?
-
C言語に関する質問
-
mallocについて
-
newしないオブジェクトについて
-
MFCのCStringについて
-
new と malloc によるメモリの...
-
16進ダンプのプログラム
-
malloc呼び出し時のセグメンテ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
allocってなんですか?
-
newしないオブジェクトについて
-
ヒープメモリの解放について
-
stringの最大サイズ
-
void*型のデータサイズ
-
ビットをローテートするプログ...
-
malloc呼び出し時のセグメンテ...
-
スタック破壊の上手な見つけ方...
-
C++のnewで確保したメモリーの...
-
配列の添え字の最大数とは?
-
プログラムが途中で強制終了し...
-
DLLのマルチスレッドの動作につ...
-
mallocで確保するメモリの領域...
-
free関数で動作が止まる
-
グローバル変数のサイズ
-
デストラクタを呼びたい
-
malloc でのメモリ取得状況の可...
-
メモリ不足になってしまう。
-
HEAP に関すること
おすすめ情報