No.2ベストアンサー
- 回答日時:
いくつか気になったので指摘しておきます.
・sscanf(tok, "%08d", &l); のところ, l は long だから %08d ではなく %08ld とすべき... いや, 0 が使えないから %8ld じゃないとダメか.
・printf ("l=%d, m=%d n=%d\n", l); は書式文字列に対して引数が足りない.
・b[i] = strtod (tok, e); の e の値はどうなっていますか?
ご指摘をヒントに e の部分を次のようにいじくったら問題なく動きました。
(異常)
char **e;
値 = strtod (文字列変数, e);
(正常)
char *e;
値 = strtod (文字列変数, &e);
char **e; がダメかというと、そうではなく、検証プログラムを作るとちゃんと動作します。
他のご指摘部、
%08ld は intもlongも32bit長なので実害はなかったです。
正しくはご指摘通りですから修正しましたが動作に違いはありませんでした。
printfの引数は注意不足の間違いでしたので修正しましたが、こちらも動作は同じでした。
何でもかんでも大域変数にする下手なプログラムの不具合が、環境が変わったことで現れたのだと思います。全体を作り直すようにします。
ご指摘を頂いたおかげで、踏ん切りがつきました。ありがとうございました。
No.1
- 回答日時:
正直なところ, これではなにが問題なのかさっぱりわからないね.
この文章からすると, win7 では strtol や strtod を使ったときに「正しく」変換できない, ということでいい? だとしたら, 2つの PC で
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x = strtol("12345", 0, 0);
double d = strtod("15.93e6", 0);
printf("x = %d, d = %f\n", x, d);
return 0;
}
というプログラムを実行したらそれぞれどのように表示されますか?
あと, それぞれで gcc のバージョンはどうなっていますか?
つたない質問に回答いただきありがとうございます。
ご理解のとおりです。
今時点は win7 の環境しかないのですが、確認してみました。
いただいたプログラムの結果
$ ./xxx.exe
x = 12345, d = 15930000.000000
問題なく動きました。
$ gcc -dumpversion
5.4.0
私の問題認識が違っていたということですね。
更に、次の確認をしてみました。
プログラム1
int main(){
printf ("01234567,");
for (i=0; i<64; i++) {
printf ("%d,%.2f,", i, (float)i/2);
}
return 0;
}
実際と同じ文字列ー数値変換部
char text[]="プログラム1の実行結果の文字列"
char *tok;
char **e;
int i = 0;
long l;
int a[128];
double b[128];
int main () {
tok = strtok (text, ",");
sscanf(tok, "%08d", &l);
printf ("l=%d, m=%d n=%d\n", l);
while (i<128) {
tok = strtok (NULL, ",");
if (tok == NULL) {
break;
}
a[i] = strtol (tok, NULL, 0);
tok = strtok (NULL, ",");
if (tok == NULL) {
break;
}
b[i] = strtod (tok, e);
printf ("a[%d]=%d, b[%d]=%f\n", i, a[i], i, b[i]);
i++;
}
return 0;
}
実行結果
$ ./xxx
l=1234567
a[0]=0, b[0]=0.000000
:
: 中略
:
a[63]=63, b[63]=31.500000
これも問題ありませんでした。
という事は、文字列が正常なら問題なく動作するわけで、
ポインタや変数を壊している場所がないか、再々確認してみます。
ご指摘ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- C言語・C++・C# C言語で移動平均のプログラムを作りたいのですが、数値をファイルから取ってきて計算をするプログラムはど 1 2022/09/29 01:21
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- C言語・C++・C# このプログラミング誰か教えてくれませんか 3 2022/05/13 17:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 2 2022/05/14 09:45
- その他(OS) Windowsで大量の画像サイズを半自動で変更する方法 6 2023/02/17 08:45
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Excel(エクセル) エクセルでSUMIFS関数で条件範囲の部分が#valueになる。 4 2023/04/28 12:42
- C言語・C++・C# 至急お願いします。C言語で.imgのファイルを読み込んで1バイトづつ出力するプログラムを作りたいので 3 2023/01/16 22:49
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
onenote内でこんな感じで黄緑に...
-
変なソフト
-
ゲーミングpcでの対処法
-
Microsoft office で ソフトを...
-
学習院女子大学が学習院大学と...
-
パソコンを新しく交換したら、C...
-
STEP_K のインストールについて
-
単語帳の動画を作りたい
-
ゲーミングpc親に買ってもらえない
-
マイクロソフトアカウントについて
-
勉強するなら朝?
-
学校のpc(chromebook)で教師や...
-
以下のゲーミングノートパソコ...
-
できてしまったw
-
ダウンロード版ソフトについて ...
-
PS4のソフトのパッケージ版のや...
-
csvファイルをlinuxコマンドで...
-
Switch ゲームソフト
-
息子は中学1年軽度知的障害があ...
-
授業用のPCでアプリがインスト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
拡張子の大文字と小文字の違い...
-
「秀丸エディター」を使ってい...
-
ASCII
-
スマホ初心者の中学生です。 い...
-
ファイル形式を特定できません
-
二種類のワードの違い
-
JPG形式の写真をJPEG形式にする...
-
c言語の 数字ー数値変換用関数...
-
描画方法でインターレースとは。
-
筆まめ 予期しないファイルです
-
フォトショップの別名保存時の...
-
拡張子の変更は可能ですか?
-
リアルプレーヤー
-
iMacをMacMiniのモニターとして...
-
Peopleって可算名詞?不可算名詞?
-
Illustratorで表計算?
-
優しい響きの英単語を探してい...
-
Excelの損益分岐点のグラフの作...
-
蒸し器の蒸気量に関して
-
英単語・カタカナ・発音記号・...
おすすめ情報