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

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

15
strtok()はどのように文字列をCのトークンに分割しますか?
strtok()機能の働きを説明してください。マニュアルには、文字列をトークンに分解すると書かれています。マニュアルでは実際に何が行われているのか理解できません。 私は上の時計を追加strし、*pch最初のwhileループが発生したとき、内容はその作業をチェックするstrだけで「これ」でした。以下に示す出力はどのように画面に印刷されましたか? /* strtok example */ #include <stdio.h> #include <string.h> int main () { char str[] ="- This, a sample string."; char * pch; printf ("Splitting string \"%s\" into tokens:\n",str); pch = strtok (str," ,.-"); while (pch != NULL) { printf ("%s\n",pch); pch = strtok (NULL, " ,.-"); } return …
114 c  string  split  token  strtok 


4
スペースのある左パッドprintf
printfを使用するときに文字列の左側にスペースを埋め込むにはどうすればよいですか? たとえば、「He​​llo」の前に40スペースを印刷したいとします。 また、印刷したい文字列は複数行で構成されています。各行を個別に印刷する必要がありますか? 編集:明確にするために、私はすべての行の前に正確に40スペースを印刷したいと思っています。
114 c  formatting  printf 

13
接続拒否エラーの理由は何ですか?
別のクライアントを使用してCでサーバープログラムを作成しようとしています。たとえば、ポート2080を介して接続しようとすると、このエラーが発生します。 connection refused このエラーの原因は何ですか?

5
GDBの破損したスタックフレーム-デバッグ方法
次のスタックトレースがあります。これからデバッグに役立つものを作成することは可能ですか? Program received signal SIGSEGV, Segmentation fault. 0x00000002 in ?? () (gdb) bt #0 0x00000002 in ?? () #1 0x00000001 in ?? () #2 0xbffff284 in ?? () Backtrace stopped: previous frame inner to this frame (corrupt stack?) (gdb) を取得しSegmentation fault、スタックトレースがあまり役に立たない場合、どこからコードを調べればよいでしょうか。 注:コードを投稿すると、SOの専門家が答えをくれます。私はSOからガイダンスを受けて自分で答えを見つけたいので、ここではコードを投稿しません。謝罪。
113 c  recursion  gdb 

7
C99 stdint.hヘッダーとMS Visual Studio
驚いたことに、C99のstdint.hがMS Visual Studio 2003以降にないことがわかりました。彼らには理由があると確信していますが、誰がどこでコピーをダウンロードできるか知っていますか?このヘッダーがないと、uint32_tなどの有用な型の定義がありません。
113 c++  c  visual-studio  c99 

9
「int main」です。有効なC / C ++プログラム?
私のコンパイラはそうではないのに、コンパイラがそう思っているように見えるので、私は尋ねます。 echo 'int main;' | cc -x c - -Wall echo 'int main;' | c++ -x c++ - -Wall Clangはこれに関する警告やエラーを発行せず、gccは微妙な警告のみを発行します'main' is usually a function [-Wmain]が、Cとしてコンパイルされた場合のみ-std=です。aの指定は重要ではないようです。 それ以外の場合は、コンパイルして正常にリンクします。しかし、実行すると、SIGBUS(私にとっては)ですぐに終了します。 CとC ++でmain()が何を返す必要があるか(優れた)回答を読む そして、言語仕様をざっと見てみると、メインの機能が必要なように思えます。しかし、gcc ( 'main'は通常は関数です)からの言い回し(およびここでのエラーの不足)は、おそらく別のことを示唆しているようです。-Wmain しかし、なぜ?これには、奇妙なエッジケースまたは「歴史的」な使用がありますか?誰が何を与えるか知っていますか? 私のポイントは、おそらく、これはホストされた環境ではエラーになるはずだと私は本当に思っているということです。
113 c++  c  function  main  entry-point 

7
vmallocとkmallocの違いは何ですか?
kmallocメモリの連続した物理ブロックを取得することが保証されているので、私はググったところ、ほとんどの人がの使用を提唱していることがわかりました。ただし、kmalloc必要な連続した物理ブロックが見つからない場合、失敗する可能性もあります。 メモリの連続したブロックを持つことの利点は何ですか?具体的には、システムコールに連続した物理メモリブロックが必要なのはなぜですか?使用できない理由はありますか? 最後に、システムコールの処理中にメモリを割り当てる場合、指定する必要がありますか?システムコールはアトミックコンテキストで実行されますか?vmallocGFP_ATOMIC GFP_ATOMIC 割り当ては優先度が高く、スリープしません。これは、割り込みハンドラー、下半分、およびスリープできないその他の状況で使用するフラグです。 GFP_KERNEL これは通常の割り当てであり、ブロックされる可能性があります。これは、スリープしても安全なときにプロセスコンテキストコードで使用するフラグです。

10
ptrがNULLであるfree(ptr)はメモリを破壊しますか?
理論的には free(ptr); free(ptr); すでに解放されているメモリを解放しているため、メモリ破損です。 しかし、もし free(ptr); ptr=NULL; free(ptr); OSは未定義の方法で動作するので、何が起こっているのかについてこれに関する実際の理論的分析を得ることができません。私が何をしていても、このメモリ破損はありますか? NULLポインタの解放は有効ですか?

9
なぜ未使用の戻り値をvoidにキャストするのですか?
int fn(); void whatever() { (void) fn(); } 未使用の戻り値をvoidにキャストする理由はありますか、それとも完全に時間の無駄だと思いますか? ファローアップ: まあそれはかなり包括的なようです。自己文書化コードはコメントよりも優れているため、未使用の戻り値にコメントを付けるよりも優れていると思います。個人的には、不要なノイズのため、これらの警告をオフにします。 バグが原因で脱出したら言葉を食べます...
112 c++  c  void 

3
このコードが64ビットアーキテクチャでsegfaultになるのに、32ビットでは正常に機能するのはなぜですか?
次のCパズルを見つけました。 Q:IA-64では次のプログラムがsegfaultするのに、IA-32では正常に動作するのはなぜですか? int main() { int* p; p = (int*)malloc(sizeof(int)); *p = 10; return 0; } int64ビットマシンののサイズは、ポインタのサイズと同じではない可能性があることを知っています(int32ビットであり、ポインタは64ビットである可能性があります)。しかし、これが上記のプログラムとどのように関連しているかはわかりません。何か案は?

19
#ifdefと#if-コードの特定のセクションのコンパイルを有効/無効にする方法として、どちらが優れている/より安全ですか?
これはスタイルの問題かもしれませんが、私たちの開発チームには少し分裂があるので、他の誰かがこの問題について何か考えを持っているのではないかと思いました... 基本的に、通常の開発中にオフにするデバッグ印刷ステートメントがいくつかあります。個人的に私は以下を行うことを好みます: //---- SomeSourceFile.cpp ---- #define DEBUG_ENABLED (0) ... SomeFunction() { int someVariable = 5; #if(DEBUG_ENABLED) printf("Debugging: someVariable == %d", someVariable); #endif } しかし、チームの中には次のものを好む人もいます: // #define DEBUG_ENABLED ... SomeFunction() { int someVariable = 5; #ifdef DEBUG_ENABLED printf("Debugging: someVariable == %d", someVariable); #endif } ...これらの方法のどれがあなたにとってより良く聞こえますか、そしてなぜですか?私は、何かが常に定義されており、他の定義を破壊する危険がないため、最初の方が安全だと感じています。

5
LinuxでPATH_MAXはどこに定義されていますか?
#include文字列のサイズを変更するためにPATH_MAXをintとして使用するには、どのヘッダーファイルを呼び出す必要がありますか? 宣言できるようにしたい: char *current_path[PATH_MAX]; しかし、そうすると、私のコンパイラ(LinuxのClang / LLVM)で次のエラーが発生します。 recursive_find6.c:29:20: error: use of undeclared identifier 'PATH_MAX' char *current_path[PATH_MAX]; ^ 私はグーグル検索を試みましたが、まだ運がありません。 #include <limits.h> 問題/エラーを修正しません。 PATH_MAXの値がintであることも修正しますか?
112 c  linux  gcc  include  clang 



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