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

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

28
グローバル変数は悪いですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 3年前休業。 この質問を改善する C / C ++では、グローバル変数は教授が考えるほど悪いのですか?
247 c++  c  global-variables 

7
size_tとuintptr_tの比較
C標準でsize_tは、任意の配列インデックスを保持できる型であることを保証しています。つまり、論理的には、size_t任意のポインタ型を保持できる必要があります。これは合法であり、常に機能するはずであるとGoogleで見つけたいくつかのサイトで読んだことがあります。 void *v = malloc(10); size_t s = (size_t) v; そのため、C99では、標準によりintptr_tおよびuintptr_t型が導入されました。これらは、ポインタを保持できることが保証されている符号付きおよび符号なしの型です。 uintptr_t p = (size_t) v; だから、使用しての違いは何であるsize_tとはuintptr_t?どちらも符号なしであり、どちらも任意のポインタ型を保持できるはずなので、機能的には同じように見えます。明快さ以外に、aよりもuintptr_t(またはもっと良いのはa void *)を使用する本当に説得力のある理由はありますsize_tか?フィールドが内部関数によってのみ処理される不透明な構造で、これを行わない理由はありますか? 同様に、ptrdiff_tポインタの違いを保持できる符号付きの型であり、したがってほとんどのポインタを保持できるので、それはどのように区別されintptr_tますか? これらのタイプはすべて、基本的に同じ機能のわずかに異なるバージョンを提供しているのではないですか?そうでない場合、なぜですか?それらの1つを使用して、他のユーザーを使用してできないことは何ですか?もしそうなら、なぜC99は2つの本質的に不必要な型を言語に追加したのですか? 関数ポインターは現在の問題には当てはまらないため、無視してもかまいませんが、「正しい」答えの中心となるのではないかという疑惑があるので、遠慮なく触れてください。
246 c  pointers  size-t 

9
スタック破壊が検出されました
a.outファイルを実行しています。実行後、プログラムはしばらく実行され、次のメッセージで終了します。 **** stack smashing detected ***: ./a.out terminated* *======= Backtrace: =========* */lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)Aborted* これの考えられる理由は何ですか?それをどのように修正しますか?
246 c  exception  stack 


2
OR条件で#ifdefを使用する方法
非常に基本的な質問をしてごめんなさい。#ifdefディレクティブにOR条件を設定したいのですが?どうやってするか ?私は試した #ifdef LINUX | ANDROID ... .. #endif うまく行かなかった?適切な方法は何ですか?
244 c  macros 


12
「切り替え」は「if」より高速ですか?
switchステートメントは実際にはステートメントよりも高速ifですか? 以下のコードをVisual Studio 2010のx64 C ++コンパイラーで/Oxフラグを付けて実行しました。 #include <stdlib.h> #include <stdio.h> #include <time.h> #define MAX_COUNT (1 << 29) size_t counter = 0; size_t testSwitch() { clock_t start = clock(); size_t i; for (i = 0; i < MAX_COUNT; i++) { switch (counter % 4 + 1) { case 1: counter += …

14
一部のプラットフォームでこのforループが終了し、他のプラットフォームでは終了しないのはなぜですか?
最近Cを学び始め、Cを題材にした授業を行っています。私は現在ループで遊んでいて、説明の方法がわからない奇妙な動作に遭遇しています。 #include <stdio.h> int main() { int array[10],i; for (i = 0; i <=10 ; i++) { array[i]=0; /*code should never terminate*/ printf("test \n"); } printf("%d \n", sizeof(array)/sizeof(int)); return 0; } Ubuntu 14.04を実行している私のラップトップでは、このコードは壊れません。それは完了するまで実行されます。CentOS 6.6を実行している私の学校のコンピューターでも、問題なく動作します。Windows 8.1では、ループが終了することはありません。 さらに奇妙なのは、forループの条件を次のように編集するi <= 11と、コードがUbuntuを実行しているラップトップでのみ終了することです。CentOSとWindowsでは終了しません。 メモリで何が起こっているのか、同じコードを実行している異なるOSが異なる結果をもたらす理由を誰かが説明できますか? 編集:forループが範囲外になることを知っています。わざとやってます。OSやコンピューターによって動作がどのように異なるのかがわかりません。

14
Cで関数のオーバーロードを実現する方法は?
Cで関数のオーバーロードを実現する方法はありますか?私はのようにオーバーロードされる単純な関数を探しています foo (int a) foo (char b) foo (float c , int d) 簡単な方法はないと思います。回避策がある場合は、それを探しています。
240 c  overloading 

7
Cの関数ポインターのtypedefについて
引数を持つ関数へのポインタのtypedefを持つ他の人々のコードを読んだとき、私はいつも少し困惑してきました。少し前にCで記述された数値アルゴリズムを理解しようとすると、このような定義に取り掛かるのにしばらく時間がかかったことを思い出します。では、関数へのポインタの良いtypedefを作成する方法(することとしないこと)に関するヒントと考えを共有して、なぜそれらが役立つのか、他の人の作業をどのように理解するのかについて教えてください。ありがとう!

5
ptyとttyはどういう意味ですか?
私は多くの言及があることに気づきました、ptyそしてttyいくつかのオープンソースプロジェクトでは、誰かが彼らが何を意味し、それらの違いは何であるか教えてもらえますか?ありがとう!
237 c  unix  networking  tty  vocabulary 


13
fgets()入力から末尾の改行文字を削除する
ユーザーからデータを取得し、それをgccの別の関数に送信しようとしています。コードはこのようなものです。 printf("Enter your Name: "); if (!(fgets(Name, sizeof Name, stdin) != NULL)) { fprintf(stderr, "Error reading Name.\n"); exit(1); } ただし、\n最後に改行文字があることがわかりました。ですから、入力するJohnと送信されてしまいますJohn\n。それを削除し\nて適切な文字列を送信するにはどうすればよいですか。
236 c  string  gcc  newline  fgets 

10
Cでexternキーワードを正しく使用する方法
私の質問は、関数がexternC のキーワードで参照される場合についてです。 これが実際にいつ使用されるべきかはわかりません。私がプログラムを書いているとき、私が使用するすべての機能は、インクルードしたヘッダーファイルを介して利用できるようになります。それではextern、ヘッダーファイルで公開されていないものにアクセスすると便利なのはなぜでしょうか。 私はどのようにextern正しく動作しないか考えているかもしれません。もしそうなら私を訂正してください。 編集:はずですextern何か、それはヘッダファイルにキーワードを指定せずにデフォルトの宣言ですか?
235 c 

26
インタビューの質問:1つの文字列が他の文字列の回転であるかどうかを確認します[終了]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 9年前休業。 ロックされています。質問はトピックから外れていますが、歴史的に重要であるため、この質問とその回答はロックされています。現在、新しい回答や相互作用を受け入れていません。 私の友人は本日、ソフトウェア開発者の立場についてのインタビューで次の質問をされました: 2つの文字列を考えるs1とs2、どのようにかどうかをチェックしますs1で、回転のバージョンs2? 例: 場合はs1 = "stackoverflow"、その後、次はその回転バージョンの一部です: "tackoverflows" "ackoverflowst" "overflowstack" ここで、as "stackoverflwo"はローテーションバージョンではありません。 彼が出した答えは: のs2サブストリングである最長の接頭辞を取得して見つけますs1。これにより、回転のポイントが得られます。そのポイントを見つけたら、そのポイントで中断s2してとを取得s2aしs2b、次にconcatenate(s2a,s2b) == s1 それは私と私の友人にとって良い解決策のように見えます。しかし、インタビュアーはそうではないと考えました。彼はもっと簡単な解決策を求めました。これをどのように行うのか教えてくださいJava/C/C++。 前もって感謝します。
235 java  c++  c 

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