c言語の勉強しているのですが、気になることがあります.。。。
#include<stdio.h>
int main(void)
{
do{
char moji[10];
scanf(“%s”,&moji);
printf(“%s”,moji);
}while(1);
return 0;}
charの宣言で10ビットまでしか入力できないはずなのに、なぜかAを10個以上入力してもエラーが出ません。
しかしこのdo while文を削除した上でAを10個以上入力するとエラーが表示されます。
なぜこのようなことが起きるのかご教授願えないでしょうか
No.1
- 回答日時:
>charの宣言で10ビットまでしか入力できないはず
scanf()では、入力桁数のチェックは行われません。
従って10文字以上の入力もできてしまいます。
その場合、変数宣言により確保したメモリ領域外に上書きされ、
後に続く変数の内容を変える事が有ります。
変数以外の領域に上書きされた時の動作は不定(何が起きるか
解らない)となります。
偉そうですみません...
なぜdo whileにすると続けてエラーと出ずに入力し続けられるのでしょうおうか?
あとこのバグの名称はメモリリークというのですか?
No.2
- 回答日時:
誤;10ビット
正:10文字(又は10バイト)
No.3ベストアンサー
- 回答日時:
>なぜdo whileにすると続けてエラーと出ずに入力し続けられるのでしょうおうか?
ぶっ壊したメモリの影響がループ中では影響しなかっただけ…です。
破壊した場所がmain()からの戻った時に実行されるアドレスが格納されていたとすると、
そのdo whileループは無限ループの為、main()から戻りませんので影響が『見えません』。
>あとこのバグの名称はメモリリークというのですか?
バッファオーバーランという、お手本のような不具合です。
https://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83 …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
C言語について
-
C言語 逆ピラミッドの作り方
-
漢字のソートについて
-
プログラミングの問題で、キー...
-
4桁の数字以外を入力したらエラ...
-
入力候補を表示させるには・・・?
-
double型が正常に認識されてい...
-
プログラムC言語の整数の約数に...
-
C言語 While文(ループ)内の...
-
c言語でひらがなのしりとりをで...
-
if文の条件にscanf関数を使うと…?
-
java初心者です。入力されたの...
-
scanf("%s", buf);でスペースを...
-
VBでの日付入力値のフォーマッ...
-
getchar()について 教えてくだ...
-
Linuxで入力待ちなしkeyread関...
-
cout関数を使っているのですが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
プログラミング初心者です。 Py...
-
double型が正常に認識されてい...
-
java初心者です。入力されたの...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
C言語scanf_sで何故か2回入力に...
-
if文の条件にscanf関数を使うと…?
-
プログラミングの問題です 「金...
-
Linuxで入力待ちなしkeyread関...
-
ワードで文字を入力する時の変...
-
cout関数を使っているのですが...
-
batプログラム上で文字列を入力...
-
Userformの入力順序をタブオー...
-
scanf が無視されます
-
C言語 逆ピラミッドの作り方
-
gets_sがうまく動かない
-
Excel VBAで、Application.Inpu...
おすすめ情報