2

LynxOSのの実装はstrtod、Linux、さらに言えばSolarisの場合と同じケースをすべて処理できるわけではないようです。私が抱えている問題は、10進数または16進数を含む可能性のあるテキストを解析しようとしていることです。

Linuxでは私は

a = strtod(pStr, (char **)NULL);

そして、やaなどの入力文字列の期待値を取得します。1.2345670x40

LynxOSでは、10進数は正しく解析されますが、16進数は「x」に達すると停止するため、単純に0として解析されます。マニュアルページを見ると、LynxOSのstrtodは入力で10進文字列のみをサポートしているようです。

ここの誰かがLynxとLinuxの両方で動作する代替案を知っていますか?

4

2 に答える 2

2

標準からの引用(7.20.1.3)(http://www.open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf

サブジェクトシーケンスの予想される形式は、オプションのプラス記号またはマイナス記号、次に次のいずれかです
。— 6.4.4.2で定義されているように、オプションで小数点文字を含む空でない10進数のシーケンス、およびオプションの指数部分。
— 0xまたは0X、その後、オプションで小数点文字を含む16進数の空でないシーケンス、および6.4.4.2で定義されているオプションの2進指数部分。
— [...]

したがって、LynxOSで使用しているコンパイラはC99コンパイラではありません。


私のC89標準のコピーには、0xプレフィックスへの参照がありません。

4.10.1.4strtod関数

[...]

サブジェクトシーケンスの予想される形式は、オプションのプラスまたはマイナス記号、オプションで小数点文字を含む空でない数字のシーケンス、オプションの指数部分です[...]

于 2010-12-11T22:12:38.540 に答える
-2

strtod2つではなく3つの引数を取ります。正しいヘッダー(stdlib.h)を含めてプロトタイプを作成した場合、コンパイラーはエラーを発行します。間違ったシグニチャで関数を呼び出しているため、プログラムの動作は未定義です。これを修正すれば、すべてがうまくいくでしょう。

于 2010-12-11T22:03:50.857 に答える