問題タブ [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.
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 については上記と同じです。
c - C での 128..255 文字の適切な処理
Win-1251 でエンコードされたテキストを処理する必要があります (8 ビット エンコード、キリル文字には 128..255 の一部を使用)。私が知る限り、C は 7 ビット ASCII を念頭に置いて作成されており、127 を超えるシングルバイト文字は明示的にサポートされていません。いくつか質問があります。
- このテキストのより適切なタイプは次のどれですか:
char[]
またはunsigned char[]
? unsigned char[]
組み込み関数 (strlen
, )を使用するとstrcmp
、コンパイラは への暗黙のキャストについて警告しchar*
ます。そのようなキャストは何かを壊すことができますか?unsigned char
文字列を明示的にサポートするには、一部の関数を再実装する必要がありますか?