以下のようなプログラムを書きました。(一部省略)
data2[8] = '\0'; の行が実行された後になぜかgの値が1から0に変化してしまいました。
勝手に変数の値が変化しており、原因が把握できていません。
この原因として考えられることがあれば教えていただけないでしょうか?
よろしくお願いします
以下、書いたプログラムです。
char data2[8];
FILE* fp;
int g;
int main{
fread(data2,8,1,fp);
data2[8] = '\0'; ←ここでgの値が変化します。
fread(data2,8,1,fp);
data2[8] = '\0';
return 0;
}
No.3
- 回答日時:
皆さんがおっしゃるように,data2[8]は間違いで,こうしたければ
char data2[9]; <=9バイト確保
fread(data2,8,1,fp); <=8バイト読み込み
data2[8]='\0'; <= 9バイト目をNULLに.
とすべきでしょう.
プログラムメモリ上では,data2が8バイト,その直後にg が割り当てられているようで,
data2[8]はgの4バイトの一部にあたるのだと思います.だから,gの値が変わってしまう.
自分のプログラムを破壊しているということですね.
この場合,自プログラム内のメモリにアクセスしているのでOSはエラーを返さないのです.
もちろん,破壊した部分がデータではなく,プログラム部分であれば,破壊されたプログラムによってCPUがそれを実行できない場合は,エラーが起こりプログラムが異常終了します.
No.2
- 回答日時:
char data2[8];と宣言した場合、data2の[]内は0~7までが有効です
なので、data2[8] = '\0';は間違い
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# プログラミングの問題です。写真のプログラムの1から10を下のように入力しましたがプログラムが上手くい 3 2022/07/01 23:31
- その他(プログラミング・Web制作) pythonでDBのカラム名で取得したオブジェクトの値を表示したい 1 2022/05/13 03:41
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Excel(エクセル) EXCEL 行固定列移動 3 2022/04/04 09:27
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
変数の内容がコロコロ変わる、原因を教えてください。
C言語・C++・C#
-
値が変わるのはどうしてでしょうか?
C言語・C++・C#
-
16進数を10進数に簡単に変換する関数は?
C言語・C++・C#
-
-
4
構造体の宣言でエラーが出ます。
C言語・C++・C#
-
5
unsigned char配列への入力の仕方
C言語・C++・C#
-
6
配列変数のポインターが勝手に変わる
C言語・C++・C#
-
7
scanfが2回使えない・・・?;
C言語・C++・C#
-
8
関数から配列を返すには?
C言語・C++・C#
-
9
charでの計算?
C言語・C++・C#
-
10
C++のfor文について
C言語・C++・C#
-
11
C++で入力した文字列から数字を取り除くもしくは数字のみをのこす
C言語・C++・C#
-
12
エラーの意味は? Lvalue required
C言語・C++・C#
-
13
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
14
C言語での引数の省略方法
C言語・C++・C#
-
15
#pragma プリプロセス について
その他(プログラミング・Web制作)
-
16
scanf(%s", buf);でスペースを含んだ文字"
C言語・C++・C#
-
17
メモリをアドレスを直接指定して値を取得するには
C言語・C++・C#
-
18
変数が勝手に変わります
Visual Basic(VBA)
-
19
ファイルへの書込み処理が異常に遅い
C言語・C++・C#
-
20
コンボボックス表示文字列を取得する場合
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【JAVA】数字をひし形に出力す...
-
プログラミング
-
ruby
-
変数の値が勝手に変化する原因
-
_dupenv_s関数でメモリリーク
-
fortran if文
-
c言語のプログラミング 2つの整...
-
BM法(ボイヤームーア法)に...
-
C言語 バッファについて。
-
Cプログラミング
-
Vba 実数および実数タイプの変...
-
VBAで仕様書は書きますか?
-
C++ で、「)」が必要 というエ...
-
正しい五十音順について
-
VBAにてメール作成した際、一部...
-
あるプログラムのコマンドライ...
-
C言語(gcc), Linux, FTPプログ...
-
パックマンプログラム
-
Notepad++の関数リスト表示でC...
-
0除算して、落ちるプログラムと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【JAVA】数字をひし形に出力す...
-
変数の値が勝手に変化する原因
-
JCLの基本について教えてください
-
Sublime Text 3でのFortranプロ...
-
プログラミング
-
fortran if文
-
ruby
-
Fortran90についての質問です。
-
COBOLのピリオド
-
3つの整数のうち奇数のみを表示...
-
main関数終了時のreturnの意味は?
-
c言語のプログラミング 2つの整...
-
360度を超える角度
-
整数格子点を列挙するプログラム
-
N88basicを用いたGPIB制御
-
ProC 固定SQLでNULLってどう表...
-
Fortran "実引数の型が仮引数の...
-
PICのプログラムでsrandを使う...
-
Matlabについて質問2
-
4桁の数値を逆に表示されるプ...
おすすめ情報