問題タブ [pointer-conversion]

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 に答える
123 参照

c - void* を unsigned long int にキャストすると、 sizeof(void*)==sizeof(unsigned long int) の場合でも未定義の動作が発生する可能性があります

実際、C99 には uintptr_t と intptr_t があることを認識しています。しかし、教育目的のために、いくつか質問したいと思います。始める前に、これは悪い習慣であり、この方法で行うべきではないことを知っています。

Q1. ケース1は未定義の動作を引き起こす可能性がありますか? 安全ですか?そうでない場合、なぜですか?安全であれば、「case_1」変数が unsigned long int とまったく同じアドレスを保持することが保証されていますか?
Q2. ケース 2 についても同様です。
Q3. ケース3も同様。
Q4.ケース 4 については上記と同じです。

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

c - C での 128..255 文字の適切な処理

Win-1251 でエンコードされたテキストを処理する必要があります (8 ビット エンコード、キリル文字には 128..255 の一部を使用)。私が知る限り、C は 7 ビット ASCII を念頭に置いて作成されており、127 を超えるシングルバイト文字は明示的にサポートされていません。いくつか質問があります。

  • このテキストのより適切なタイプは次のどれですか:char[]またはunsigned char[]?
  • unsigned char[]組み込み関数 ( strlen, )を使用するとstrcmp、コンパイラは への暗黙のキャストについて警告しchar*ます。そのようなキャストは何かを壊すことができますか? unsigned char文字列を明示的にサポートするには、一部の関数を再実装する必要がありますか?