問題タブ [strtol]
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 - C の関数 strtol が範囲外...かどうか
strtol() を使用して文字列から数値を読み取ろうとすると、数値が範囲外の場合に返されるはずの LONG_MAX 数値が返されますが、私の数値はそれほど大きくありません
実際の結果:
110111010111111000000000
7FFFFFFF
必要な結果:
110111010111111000000000
DD7C00
c - 因数分解ループの終了条件
こんばんは、
割り当てに問題があります。
基本的に、与えられたの素因数を計算するプログラムをコーディングする必要がありますstdin
。stdin
データは、それを介してのみプログラムに入ることができecho
ます< file.txt
。データのストリームが80文字を超えることはありません(数字であってもなくてもかまいません)。
プログラムで使用する関数はread()
、、、でstrotol()
ありstrtok()
、「無関係な」コードは次のように流れます。
malloc
80の初期バイトのメモリを割り当てるために使用します。- 読み取った文字数(そして最後の文字
int
)を介して、に格納します。read()
\0
- できるだけ多くのメモリを節約するためにメモリを再割り当てし
realloc()
ます(この場合は些細なことですが、まあ...)。
ここで注意が必要です。
- データはスペースで区切る必要があるため、チェックする項目の最大数は最大で次のようになります
(n/2)+1
。ここn
で、は上限nº2で読み取られた文字数です。 long
ポイントnº1で取得された数の最大サイズの配列を作成します。numbers[0]
次の結果で埋めます:strtol(strtok(line, delim), &end, 10)
。に追加
/li>1
し、ループcounter
に入ります。while
ここで、いくつかの入力とその出力を示します。
入力:echo 1 2 3 4 5 6 7 8 9 10 | ./factors
出力:
入力./factors < integers.txt
整数に整数の列が含まれている場合。
出力:
すべての整数は適切に因数分解され、最後に次のように出力されます。
入力:echo abc 12 13 14 15 | ./factors
出力:
入力:echo -1 -2 -3 -4 -5 | ./factors
出力:
入力:echo abc abc abc | ./factors
出力:
(そしてチェックを続けません)。
入力:echo 3 4 0 6 7 | ./factors
出力:
(そしてチェックを続けません)。
私が見る限り、正常なデータストリームの最後に0
、非インスタンスまたは基本的に複数のインスタンスが発生すると失敗します。integer
integer
どうすればこれに取り組むことができるのか、そしてなぜそれが明らかにランダムに失敗するのか、何か考えはありますか?
私はCに不慣れであることをあなたに知らせなければなりません...
よろしくお願いします。
================================================== ==
EDIT1:リクエストに応じて、を生成numbers[]
し、そこから読み取るコードフラグメントは次のstdin
とおりです。
c - memcpyとstrtoulを使用して数字の代わりにぎこちないものを取得する
gccでコンパイルしている次のコードがあります。
そして、私はそれを次の方法でテストしようとしています:
しかし、私は次の結果を得ています:
構文解析の結果:1に沿って12345678902に沿って4294967295
なぜ2番目のunsignedlongが間違っているのですか?
ありがとう
c - 16進文字列をlongに変換します
32ビットマシンで16進数から整数への変換を行おうとしています。これが私がテストしているコードです、
これは私が得るものです:
ご覧のとおり、strtolを使用すると、オーバーフローが発生します(errnoでも確認しました)が、0xffff1234は有効な整数の32ビット値であるため、何も起こらないと思います。私は4294906420または-60876のいずれかを期待します
私は何が欠けていますか?
c - strtokがNULLを返すと、strtolはsegfaultを返します
/ * b.csv
//私の出力
* /
問題は:/ * b.csv
上記のようにテーブルが壊れている場合、「strtok」はNULLを返すため、「strtol」は「segfault」を返します。これを解決するにはどうすればよいですか。
ここでの主な問題は、2番目が存在しない場合、3番目を2番目として扱い、セグメンテーション違反を発生させることです。たとえば、b.csvの3行目にある ",,, 34"は、3番目の値が存在することを意味しますが、 "34"は1番目の値であり、2番目と3番目はそれぞれNULLであるように動作します。
c - Linux C文字列からintへ
"09195462965"
この文字列を intに変換しようとしていますが、問題が発生しています。
私のコードのスニペット:
クライアントが文字列を送信し"09195462965"
、サーバーがそれを受信します。
int
サーバー上で、その文字列をieに変換する必要があります09195462965
。
注: サーバーは数値を文字列として送信します。
atoi - STM32atoiとstrtolで最初の2桁が欠落することがあります
エンコーダーの値であるRS485を介して送信された値を読み取っています。最初にE文字が返されたかどうかを確認し(エンコーダーがエラーを報告している)、そうでない場合は次の手順を実行します。
バッファの値は4033536で、位置は33536に設定されます。これは、この関数では毎回発生するわけではありません。おそらく、カウントしていませんが、1000回に1回です。プログラムカウンターを元に戻し、失敗した場合に行を再実行すると同じ結果が返されますが、デバッガーを再度起動すると、値が正しく変換されます。
私はkeiluvision4を使用しています。これは、stm32f103vet6とstm32f10ライブラリV2.0.1を使用するカスタムボードです。
ありがとう
c - パラメータを再利用するstrtol
このコードは期待どおりに動作するようで、単一のポインターを使用して数値の配列を設定します
私の質問は:
strtol で p を param1 (ソース) として使用し、&p を param 2 (最初の無効な文字のアドレス) として使用することは有効ですか?
c - strtol が read(fd,buffer,ssize_t) から文字列を変換しない
strtol は、テキスト ファイルを読み取って取得した文字列を変換しません。
}
コンパイルされたコードを実行すると、コンソールにこれが表示されます
やりたいことは、031 を値 31 の long または int に変換することだけです。
objective-c - 「バイト全体」を構築するために、このコードに 3 バイトの配列があるのはなぜですか?
インターネットで次のコードを見つけました。これは、NSString
表現などを
@"00F04100002712"
実際のバイト配列に変換します。コードは機能し、正しい出力を生成します。コードでは最初の 2 つの位置のみが使用されているため、char byte_chars[3]
代わりにある理由がわかりません。char byte_chars[2]
strtol
関数呼び出しと関係があると思いますが、何が原因かわかりません。
誰かがこれがどのように、そしてなぜ機能するのか説明できますか?