問題タブ [ansi-c]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
114 参照

c - Malloc() と free() は、C で構造体を値で渡すのを妨げています

プロジェクトに取り組んでいますが、セグメンテーション違反が発生し続け、構造体の値が渡されません。なぜ私の頭がおかしくなっているのかを理解する. 単純なプログラムで問題を見つけようとしましたが、問題は見つかったと思いますが、修正方法がわかりません。

問題は、構造体を「malloc」し、値で渡すと、値が失われることです。後で「無料」を追加すると、セグメンテーション違反が発生します。「malloc()」の前または「free()」の後の値にアクセスしようとしていないので、なぜこれが起こっているのか混乱しています。

問題の簡単なモデルを次に示します。

これにより、次が生成されます。

「gcc -Wall -pedantic -ansi」でプログラムをコンパイルしましたが、エラーや警告は表示されません。

「malloc」と「free」をコメントアウトすると、次のように正しく生成されます。

「free」のみをコメントアウトして「malloc」をそのままにしておくと、セグメンテーション違反は修正されますが、構造体の値は依然として正しくありません。この単純なプログラムでは、"malloc()" と "free()" は実際には必要ありませんが、より大きなプロジェクトでは必要です。この単純なプログラムでそれらを機能させることができれば、より大きなプログラムを修正できると思います。残念ながら、Google で同様の問題を見つけることができません。

0 投票する
1 に答える
597 参照

c - C fgets() は、2 回入力するのではなく、EOF まで入力を取得します

入力のすべての行を逆にするプログラムを作成しています。

これは私のコードです:

私のテスト入力:

最初の行を反転して印刷できます。

しかし、入力の次の行を入力し始めると、それは逆の入力の隣にあるため、テスト入力に対して実行される完全なプログラムは次のようになります。

次のようになります。

回避策として、出力の後にもう一度押しEnterて、次の入力行を別の行に入力できるようにしますが、なぜそれを行う必要があるのか​​ わかりません。

0 投票する
1 に答える
161 参照

c - 多次元配列を別の型の多次元配列にキャストする

私は持っている

ハードコードされたオクテット値の 3 次元 16x256x16 配列として宣言されています。

最適化の目的やその他のさまざまな理由から、この配列を uint64_t 値の 3 次元の 16x256x2 配列として解釈する必要があります。

私が必要としているのは、厳密な ISO/ANSI C 内にキャストする有効な方法 longByteTable です 。これは:reinterpretedTable

それを行う適切な方法は?

PSlongByteTable後者のタイプでは宣言できません。異なるエンディアンでは適切に機能せず、異なるエンディアンに対して異なるテーブルを宣言するか、ランタイムチェックとローテーションを実行する必要があるためです。はい、再解釈された配列のそれ以降のすべての変換は、エンディアン不変です。

0 投票する
1 に答える
74 参照

c - 利用可能な物理メモリの量を評価する

まず第一に、私のアプリケーションは、仮想メモリや MMU などを備えた「通常の」オペレーティング システムでは実行されませんが、物理メモリの量が固定され、制限された組み込みシステムで実行されます。

したがって、この質問はプレーンな ANSI-C に焦点を当てています。malloc() を呼び出すと、使用可能なメモリの量が割り当てられたサイズだけ減少します。残りの空きメモリ量を取得するために使用できる ANSI-C 関数はありますか?

0 投票する
3 に答える
1428 参照

c - 数字の後に無効な文字を含む文字列を渡すと、atof() 関数が 0 を返さないのはなぜですか?

文字列をフロートに変換する必要があります。文字列が数値でない場合は、0 を返します。

atof()次のコードを使用して、関数がこれに対して機能するかどうかをテストしようとしました。

atof についての私の理解では、atof が変換できない場合に返される値は 0 ですが、この行は1.0.

なぜこれが起こるのですか?ドキュメントにより、入力が数値でない場合は常に atof が 0 を返すことを意味していることを理解しました。

0 投票する
1 に答える
2994 参照

c - 複数の定義と最初に定義されたエラー

私は、いくつかのファイルで構成された小さな C プログラムを作成しました。コンパイルすると、「複数の定義」のエラーが発生します。

私のmain.c:

私のmat.cファイル:

私の general_structs.h ファイル:

私のメイクファイル:

この問題をさまざまな手法で解決しようとしていますが、まだ成功していません。

私が受け取るエラーは次のとおりです。

なぜこのエラーが発生するのですか? これを解決するにはどうすればよいですか?

ありがとう

0 投票する
2 に答える
74 参照

visual-studio-2015 - Visual Studio で記述された Ansi C の hello world からアセンブリ コードを表示するにはどうすればよいですか?

私はVisual StudioでAnsi Cで遊んでいて、単純なAnsi Cプログラムを作成しました(cppではなくansicを使用するようにVS構成を変更する必要がありました)

私はそれをコンパイルし、これを生成しました:

ここに画像の説明を入力

まず第一に、単純な .exe を期待していましたが、なぜこの .ilk と .pdb が作成されたのかわかりませんが、ここでの問題は、コンパイルされた c プログラムによって生成されたアセンブリ コードをどのように確認できるかということです。

ありがとう