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

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

8
pthread_create()によって呼び出される関数への複数の引数?
別のスレッドで呼び出したい関数に複数の引数を渡す必要があります。私がしまし読んこれを行うための典型的な方法は、構造体を定義することへの関数のポインタを渡し、引数のためにそれを逆参照することであること。ただし、これを機能させることはできません。 #include <stdio.h> #include <pthread.h> struct arg_struct { int arg1; int arg2; }; void *print_the_arguments(void *arguments) { struct arg_struct *args = (struct arg_struct *)args; printf("%d\n", args -> arg1); printf("%d\n", args -> arg2); pthread_exit(NULL); return NULL; } int main() { pthread_t some_thread; struct arg_struct args; args.arg1 = 5; args.arg2 = 7; …
93 c  pthreads 


4
C libcurlは文字列に出力を取得します
このカール関数の結果を変数に格納したいのですが、どうすればよいですか? #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "curl.haxx.se"); res = curl_easy_perform(curl); /* always cleanup */ curl_easy_cleanup(curl); } return 0; } おかげで、私はそれを次のように解決しました: #include <stdio.h> #include <stdlib.h> #include <curl/curl.h> function_pt(void *ptr, size_t size, size_t nmemb, void *stream){ printf("%d", atoi(ptr)); } …
93 c  libcurl 

16
C ++での循環シフト(回転)操作のベストプラクティス
左および右シフト演算子(<<および>>)は、C ++ですでに使用可能です。しかし、循環シフトまたは回転操作を実行する方法を見つけることができませんでした。 「左回転」「右回転」などの操作はどのように行うのですか? ここで2回右に回転 Initial --> 1000 0011 0100 0010 結果として: Final --> 1010 0000 1101 0000 例が参考になります。 (編集者注:Cで回転を表現する多くの一般的な方法は、回転カウントがゼロの場合、または単一の回転機械命令以上にコンパイルされる場合、未定義の動作の影響を受けます。この質問の回答は、ベストプラクティスを文書化する必要があります。)

9
Cの入れ子関数
Cで入れ子関数を使用できますか?ネストされた関数の使用は何ですか?Cに存在する場合、それらの実装はコンパイラごとに異なりますか?
93 c  function  nested 


12
Cで2D配列をゼロにする最も速い方法は?
Cで大きな2D配列を繰り返しゼロ化したいのですが、これが現在私がしていることです。 // Array of size n * m, where n may not equal m for(j = 0; j < n; j++) { for(i = 0; i < m; i++) { array[i][j] = 0; } } memsetを使用してみました: memset(array, 0, sizeof(array)) ただし、これは1Dアレイでのみ機能します。2D配列の内容をprintfすると、最初の行はゼロですが、ランダムな大きな数の負荷がかかり、クラッシュします。

3
コマンドフラグを使用して将来の共有ライブラリにブレークポイントを設定する方法
--commandフラグを使用してgdbセッションを自動化しようとしています。共有ライブラリ(UNIXのDLLに相当)の関数にブレークポイントを設定しようとしています。私のcmds.gdbは次のようになります。 set args /home/shlomi/conf/bugs/kde/font-break.txt b IA__FcFontMatch r ただし、次のようになっています。 shlomi:〜/ progs / bugs-external / kde / font-breaking $ gdb --command = cmds.gdb ... GNU gdb 6.8-2mdv2009.0(Mandriva Linuxリリース2009.0) Copyright(C)2008 Free Software Foundation、Inc. ライセンスGPLv3 +:GNU GPLバージョン3以降 これはフリーソフトウェアです。自由に変更して再配布できます。 法律で許可されている範囲で、保証はありません。「コピーを表示」と入力します 詳細については、「保証を表示」をご覧ください。 このGDBは「i586-mandriva-linux-gnu」として構成されました... (デバッグシンボルが見つかりません) 関数「IA__FcFontMatch」は定義されていません。 将来の共有ライブラリのロード時にブレークポイントを保留にしますか?(yまたは[n])[答えはN; 端末からではなく入力] つまり、結局、ブレークポイントは設定されません。デフォルトで「y」と応答して、保留中の将来の共有ライブラリのロードにブレークポイントを設定するにはどうすればよいですか? 何かできたとは思いますが、何ができたかは思い出せません。
92 c++  c  linux  unix  gdb 

3
UNIXノンブロッキングI / O:O_NONBLOCKとFIONBIO
私がBSDソケットプログラミングのコンテキストで遭遇するすべての例と議論では、ファイル記述子をノンブロッキングI / Oモードに設定するための推奨される方法は、O_NONBLOCKフラグをfcntl()に使用することです。 int flags = fcntl(fd, F_GETFL, 0); fcntl(fd, F_SETFL, flags | O_NONBLOCK); 私はUNIXで10年以上ネットワークプログラミングを行っており、FIONBIO ioctl()これを行うために常に呼び出しを使用しています。 int opt = 1; ioctl(fd, FIONBIO, &opt); その理由をあまり考えなかった。ちょうどそのようにそれを学びました。 誰かがどちらか一方の可能性のあるそれぞれの利点について解説をしていますか?移植性の軌跡は多少異なると思いますがioctl_list(2)、個々のioctlメソッドのその側面に触れていないので、どの程度かはわかりません。

10
C構造体のデフォルト値
私はこのようなデータ構造を持っています: struct foo { int id; intルート; int backup_route; int current_route; } そしてupdate()と呼ばれる関数を使用して、その変更をリクエストします。 update(42、dont_care、dont_care、new_route); これは非常に長く、構造に何かを追加する場合、update(...)へのすべての呼び出しに 'dont_care'を追加する必要があります。 代わりに構造体を渡すことを考えていますが、構造体に「dont_care」をあらかじめ入力しておくことは、関数呼び出しで単純にスペルアウトするよりも面倒です。構造体をどこかにデフォルト値dont careで作成し、それをローカル変数として宣言した後に、気になるフィールドを設定することはできますか? struct foo bar = {.id = 42、.current_route = new_route}; update(&bar); 表現したい情報だけを更新関数に渡す最もエレガントな方法は何ですか? そして、私は他のすべてをデフォルトで-1にしたい(「気にしない」の秘密のコード)
92 c  initialization 

7
実行可能ファイルを毎時間実行するようにcronジョブを設定するにはどうすればよいですか?
1時間ごとにgccを使用してコンパイルされた実行可能ファイルを実行するcronジョブを設定する必要があります。 rootとしてログインして入力しました crontab -e 次に、以下を入力してファイルを保存しました。 0 * * * * /path_to_executable ただし、cronジョブは機能しません。 入力する/...path_to_executableと、セグメンテーション違反が発生します。実行可能ファイルは、それが置かれているフォルダーからしか実行できません。この問題を解決する方法はありますか?
92 c  linux  gcc  cron  crontab 


30
アルゴリズム:配列から重複した整数を削除する効率的な方法
この問題は、マイクロソフトへのインタビューから得ました。 ランダムな整数の配列を指定して、重複した数値を削除し、元の配列の一意の数値を返すアルゴリズムをCで記述します。 たとえば、入力:{4, 8, 4, 1, 1, 2, 9} 出力:{4, 8, 1, 2, 9, ?, ?} 注意点の1つは、予想されるアルゴリズムでは配列を最初にソートする必要がないことです。また、要素が削除された場合、次の要素も前にシフトする必要があります。とにかく、要素が前方にシフトされた配列の末尾の要素の値は無視できます。 更新:結果は元の配列で返される必要があり、ヘルパーデータ構造(ハッシュテーブルなど)は使用しないでください。ただし、注文を保存する必要はないと思います。 Update2:なぜこれらの非現実的な制約が不思議に思う人のために、これはインタビューの質問であり、これらの制約はすべて、私がさまざまなアイデアを思いつくことができる方法を考えるために思考プロセス中に議論されます。

12
ポインター宣言でのアスタリスクの配置
私は最近、C / C ++を最終的に習得する必要があると最近決定しました。ポインタについて、またはより正確には、その定義について、私が本当に理解していないことが1つあります。 これらの例はどうですか: int* test; int *test; int * test; int* test,test2; int *test,test2; int * test,test2; さて、私の理解では、最初の3つのケースはすべて同じことをしています:Testはintではなく、1へのポインターです。 2番目の例のセットは、もう少しトリッキーです。ケース4では、testとtest2の両方がintへのポインターですが、ケース5ではtestのみがポインターですが、test2は「実際の」intです。ケース6はどうですか?ケース5と同じ?
92 c++  c  pointers  declaration 


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