タグ付けされた質問 「c」

Cは、システムプログラミング(OSおよび組み込み)、ライブラリ、ゲーム、クロスプラットフォームに使用される汎用プログラミング言語です。このタグは、ISO 9899標準で定義されているC言語に関する一般的な質問で使用する必要があります(特に指定のない限り、最新バージョン9899:2018。バージョン固有のリクエストには、c89、c99、c11などのタグも付けます)。CはC ++とは異なり、合理的な理由がない限り、C ++タグと組み合わせるべきではありません。

11
#pragma packエフェクト
誰かが#pragma packプリプロセッサステートメントの機能を説明できるかどうか、さらに重要なことには、なぜそれを使用する必要があるのか​​と思っていました。 いくつかの洞察を提供してくれたMSDNページをチェックアウトしましたが、経験のある人からもっと聞いてもらいたいと思っていました。以前はコードで見たことがありますが、もうどこにあるかわかりません。

8
fprintf、printf、sprintfの違いは?
、、、の違いについて簡単な英語printfで fprintf、sprintf例を使って説明できますか? どのストリームにありますか? 「Cでのファイル処理」について読んでいるとき、私はこれら3つの間で本当に混乱しています。
233 c  io  stream  printf 

8
uint8_tとunsigned char
使用することの利点は何であるuint8_t以上unsigned charCには? ほとんどすべてのシステムuint8_tでのtypedefにすぎないことを知っているunsigned charので、なぜそれを使用するのですか?
231 c  typedef 

30
メモリリークは大丈夫ですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 2年前休業。 この質問を改善する CまたはC ++アプリケーションでメモリリークが発生しても許容されますか? アプリケーションのコードの最後の行(たとえば、グローバルオブジェクトのデストラクタ)までメモリを割り当てて使用するとどうなるでしょうか。メモリ使用量が時間の経過とともに増加しない限り、アプリケーションが終了したときに(Windows、Mac、およびLinux)OSを信頼してメモリを解放してもよいですか?OSによって解放されるまでメモリが継続的に使用されていた場合、これを実際のメモリリークと見なしますか? サードパーティのライブラリがあなたにこの状況を強いた場合はどうなりますか?それがどれほど優れていても、サードパーティのライブラリの使用を拒否しますか? 実用上の欠点は1つだけです。つまり、これらの良性のリークは、メモリリーク検出ツールで誤検知として表示されます。
231 c++  c  memory-leaks 

11
GET関数が危険なため使用できないのはなぜですか?
gets()GCCで関数を使用するCコードをコンパイルしようとすると、次の警告が表示されます。 (.text + 0x34):警告: `gets '関数は危険なので使用しないでください。 これはスタックの保護とセキュリティに関係していることを覚えていますが、正確な理由はわかりません。 この警告を削除するにはどうすればよいgets()ですか。また、使用に関する警告が表示されるのはなぜですか。 gets()とても危険なのなら、なぜそれを削除できないのでしょうか?
229 c  fgets  buffer-overflow  gets 

5
GCCが整数除算を実装する際に奇妙な数による乗算を使用するのはなぜですか?
私は約読んでいるdivとmul組立オペレーション、と私はC言語で簡単なプログラムを作成することにより、アクションでそれらを見ることにしました。 ファイルDivision.c #include <stdlib.h> #include <stdio.h> int main() { size_t i = 9; size_t j = i / 5; printf("%zu\n",j); return 0; } そして、次のコードでアセンブリ言語コードを生成します。 gcc -S division.c -O0 -masm=intel しかし、生成されたdivision.sファイルを見ると、div操作は含まれていません。代わりに、ビットシフトとマジックナンバーを使用して、ある種のブラックマジックを実行します。計算するコードスニペットはi/5次のとおりです。 mov rax, QWORD PTR [rbp-16] ; Move i (=9) to RAX movabs rdx, -3689348814741910323 ; Move some magic number to …



8
正確にベースポインターとスタックポインターは何ですか?彼らは何を指していますか?
WikiSquare()がDrawLine()を呼び出すウィキペディアからのこの例を使用すると、 (この図の下部には高いアドレスがあり、上部には低いアドレスがあることに注意してください。) 誰かが私に何ebpを説明してくれespますか? 私が見るところから、スタックポインターは常にスタックの先頭を指し、ベースポインターは現在の関数の先頭を指していると思いますか?または何? 編集:これはWindowsプログラムのコンテキストでこれを意味します edit2:また、どのように機能しeipますか? edit3: MSVC ++からの次のコードがあります。 var_C= dword ptr -0Ch var_8= dword ptr -8 var_4= dword ptr -4 hInstance= dword ptr 8 hPrevInstance= dword ptr 0Ch lpCmdLine= dword ptr 10h nShowCmd= dword ptr 14h それらはすべてdwordのようで、それぞれ4バイトを使用します。したがって、hInstanceから4バイトのvar_4へのギャップがあることがわかります。彼らは何ですか?ウィキペディアの写真に見られるように、私はそれが戻りアドレスだと思いますか? (編集者のメモ:質問に属さないマイケルの回答から長い引用を削除しましたが、フォローアップ質問が編集されました): これは、関数呼び出しのフローが次のとおりであるためです。 * Push parameters (hInstance, etc.) * Call function, which pushes …
225 c++  c  assembly  x86 

10
範囲外の配列にアクセスすることはどれほど危険ですか?
(Cで)境界外の配列にアクセスすることはどれほど危険ですか?時々、配列の外から読み取ったり(プログラムの他の部分で使用されているメモリにアクセスしたり、それ以降であっても理解したり)したり、配列の外のインデックスに値を設定しようとしたりすることがあります。プログラムがクラッシュすることもありますが、実行されるだけで、予期しない結果しか得られません。 さて、私が知りたいのは、これは本当に危険なのでしょうか?それが私のプログラムにダメージを与えたとしても、それほど悪くはありません。一方、まったく関係のないメモリになんとかアクセスできたために、プログラムの外で何かが壊れた場合、それは非常に悪いと思います。私はたくさんの「何かが起こる可能性があります」、「セグメンテーションは最も悪い問題ではないかもしれません」、「ハードディスクがピンクに変わり、ユニコーンがウィンドウの下で歌っているかもしれない」と読みましたが、これは本当に良いことですが、本当に何が危険ですか? 私の質問: 配列の外から値を読み取ると、プログラム以外の何かに損傷を与える可能性がありますか?物事を見ただけでは何も変わらないと思いますか、それとも、たとえばたまたま到達したファイルの「最後に開いた」属性を変更しますか? 配列の外に値を設定すると、プログラム以外のものが損傷する可能性がありますか?このスタックオーバーフローの質問から、 どのメモリロケーションにもアクセスできること、安全性が保証されていないことがわかります。 XCode内から小さなプログラムを実行します。それは私のプログラムの周りにそれ自身のメモリの外に到達できない追加の保護を提供しますか?XCodeに害を及ぼす可能性はありますか? 本質的にバグのあるコードを安全に実行する方法に関する推奨事項はありますか? OSX 10.7、Xcode 4.6を使用しています。
221 c  arrays  memory 



9
平方数字を合計するときに、負の数またはゼロを明示的に処理する必要がありますか?
最近、クラスでテストを受けました。問題の1つは次のとおりです。 数値nを指定して、数値の二乗の合計を返すC / C ++の関数を記述します。(以下は重要です)。範囲のnがある[ - (10 ^ 7)、10 ^ 7]。例:n = 123の場合、関数は14(1 ^ 2 + 2 ^ 2 + 3 ^ 2 = 14)を返す必要があります。 これは私が書いた関数です: int sum_of_digits_squared(int n) { int s = 0, c; while (n) { c = n % 10; s += (c * c); n /= …
220 c 

9
数行のコードでGCC警告を無効にする方法
Visual C ++では、を使用できます#pragma warning (disable: ...)。また、GCCではファイルごとのコンパイラフラグを上書きできることもわかりました。これを「次の行」に、またはGCCを使用してコードの領域の周りにプッシュ/ポップセマンティクスで行うにはどうすればよいですか?

11
C fopen vs open
使用したい理由がありますか(構文上の理由以外) FILE *fdopen(int fd, const char *mode); または FILE *fopen(const char *path, const char *mode); の代わりに int open(const char *pathname, int flags, mode_t mode); Linux環境でCを使用する場合
219 c  linux  unix  file-io  fopen 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.