問題タブ [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.

0 投票する
2 に答える
883 参照

c - C の関数 strtol が範囲外...かどうか

strtol() を使用して文字列から数値を読み取ろうとすると、数値が範囲外の場合に返されるはずの LONG_MAX 数値が返されますが、私の数値はそれほど大きくありません

実際の結果:
110111010111111000000000
7FFFFFFF

必要な結果:
110111010111111000000000
DD7C00

0 投票する
3 に答える
154 参照

c - 因数分解ループの終了条件

こんばんは、

割り当てに問題があります。

基本的に、与えられたの素因数を計算するプログラムをコーディングする必要がありますstdinstdinデータは、それを介してのみプログラムに入ることができechoます< file.txt。データのストリームが80文字を超えることはありません(数字であってもなくてもかまいません)。

プログラムで使用する関数はread()、、、でstrotol()ありstrtok()、「無関係な」コードは次のように流れます。

  1. malloc80の初期バイトのメモリを割り当てるために使用します。
  2. 読み取った文字数(そして最後の文字int)を介して、に格納します。read()\0
  3. できるだけ多くのメモリを節約するためにメモリを再割り当てしrealloc()ます(この場合は些細なことですが、まあ...)。

ここで注意が必要です。

  1. データはスペースで区切る必要があるため、チェックする項目の最大数は最大で次のようになります(n/2)+1。ここnで、は上限nº2で読み取られた文字数です。
  2. longポイントnº1で取得された数の最大サイズの配列を作成します。
  3. numbers[0]次の結果で埋めます: strtol(strtok(line, delim), &end, 10)
  4. に追加1し、ループcounterに入ります。while

    /li>

ここで、いくつかの入力とその出力を示します。

入力: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、非インスタンスまたは基本的に複数のインスタンスが発生すると失敗します。integerinteger

どうすればこれに取り組むことができるのか、そしてなぜそれが明らかにランダムに失敗するのか、何か考えはありますか?

私はCに不慣れであることをあなたに知らせなければなりません...

よろしくお願いします。

================================================== ==

EDIT1:リクエストに応じて、を生成numbers[]し、そこから読み取るコードフラグメントは次のstdinとおりです。

0 投票する
2 に答える
312 参照

c - memcpyとstrtoulを使用して数字の代わりにぎこちないものを取得する

gccでコンパイルしている次のコードがあります。

そして、私はそれを次の方法でテストしようとしています:

しかし、私は次の結果を得ています:

構文解析の結果:1に沿って12345678902に沿って4294967295

なぜ2番目のunsignedlongが間違っているのですか?

ありがとう

0 投票する
2 に答える
8480 参照

c - 16進文字列をlongに変換します

32ビットマシンで16進数から整数への変換を行おうとしています。これが私がテストしているコードです、

これは私が得るものです:

ご覧のとおり、strtolを使用すると、オーバーフローが発生します(errnoでも確認しました)が、0xffff1234は有効な整数の32ビット値であるため、何も起こらないと思います。私は4294906420または-60876のいずれかを期待します

私は何が欠けていますか?

0 投票する
2 に答える
1607 参照

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であるように動作します。

0 投票する
2 に答える
4479 参照

c - Linux C文字列からintへ

"09195462965"この文字列を intに変換しようとしていますが、問題が発生しています。

私のコードのスニペット:

クライアントが文字列を送信し"09195462965"、サーバーがそれを受信します。

intサーバー上で、その文字列をieに変換する必要があります09195462965

注: サーバーは数値を文字列として送信します。

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

atoi - STM32atoiとstrtolで最初の2桁が欠落することがあります

エンコーダーの値であるRS485を介して送信された値を読み取っています。最初にE文字が返されたかどうかを確認し(エンコーダーがエラーを報告している)、そうでない場合は次の手順を実行します。

バッファの値は4033536で、位置は33536に設定されます。これは、この関数では毎回発生するわけではありません。おそらく、カウントしていませんが、1000回に1回です。プログラムカウンターを元に戻し、失敗した場合に行を再実行すると同じ結果が返されますが、デバッガーを再度起動すると、値が正しく変換されます。

私はkeiluvision4を使用しています。これは、stm32f103vet6とstm32f10ライブラリV2.0.1を使用するカスタムボードです。

ありがとう

0 投票する
3 に答える
601 参照

c - パラメータを再利用するstrtol

このコードは期待どおりに動作するようで、単一のポインターを使用して数値の配列を設定します

私の質問は:

strtol で p を param1 (ソース) として使用し、&p を param 2 (最初の無効な文字のアドレス) として使用することは有効ですか?

0 投票する
2 に答える
711 参照

c - strtol が read(fd,buffer,ssize_t) から文字列を変換しない

strtol は、テキスト ファイルを読み取って取得した文字列を変換しません。

}

コンパイルされたコードを実行すると、コンソールにこれが表示されます

やりたいことは、031 を値 31 の long または int に変換することだけです。

0 投票する
5 に答える
121 参照

objective-c - 「バイト全体」を構築するために、このコードに 3 バイトの配列があるのはなぜですか?

インターネットで次のコードを見つけました。これは、NSString表現などを
@"00F04100002712"実際のバイト配列に変換します。コードは機能し、正しい出力を生成します。コードでは最初の 2 つの位置のみが使用されているため、char byte_chars[3]代わりにある理由がわかりません。char byte_chars[2]

strtol関数呼び出しと関係があると思いますが、何が原因かわかりません。

誰かがこれがどのように、そしてなぜ機能するのか説明できますか?