char*で宣言したarrayにstrtolを使って、longで宣言したarrayiに代入しようと
したのですが、_p!=nullptrとエラーが出てうまくいきません。
C++
1struct Arrays{ 2 char* array[ex][ey][3]; 3 long arrayi[ex][ey][4]; 4} 5~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 6 7 Arrays arrays; 8 fp = fopen(file, "rb"); 9 fread(header, 1, 54, fp); 10 for (int i = 0; i < ex; i++) { 11 for (int j = 0; j < ey; j++) { 12 for (int k = 0; k < 3; k++) { 13 fread(&arrays.array[i][j][k], sizeof(int), 1, fp); 14 } 15 } 16 } 17 for (int i = 0; i < ex; i++) { 18 for (int j = 0; j < ey; j++) { 19 for (int k = 0; k < 3; k++) { 20 arrays.arrayi[i][j][k] = strtol(arrays.array[i][j][k], (char**)NULL, 10); 21 } 22 } 23 }
どなたかご教示お願いします…。
配列の変数宣言部分も示してください。
array[][][] の型は?
arrays.array[i][j][k] には longに変換可能な文字列がちゃんと入っていますか? 確認しましたか?
もしかして、char array[ex][ey][3]; ということ? そしたら、当然、エラー。
char* array[ex][ey][3]で宣言しているのですがエラーになります…
文字列は入っていると思うのですが、freadを使い慣れておらずもしかしたら間違っているかもしれません
> 文字列は入っていると思うのですが
printfでもすればわかるでしょ。なんで確認せんのですか?
>printfでもすればわかるでしょ
coutで出してみたのですが、コード -1073741819 で終了してしまいます。
「文字列は入っていると思うのですが」がマチガイだった、と。
なら strtol がどーのこーの以前の問題です。変換不能な文字列を渡してるんだから。
もう少し文字列が入ってるかどうか確認してみます。
バイナリモードのファイルから char* に sizeof(int) で文字列を読み込んでいるそうなのでめちゃくちゃでしょう。
array を char にしてもう1次元追加する必要があるのでは。
>バイナリモードのファイルから char* に sizeof(int) で文字列を読み込んでいるそうなのでめちゃくちゃでしょう。
>array を char にしてもう1次元追加する必要があるのでは。
やってみたのですが、読み込んだデータがめちゃくちゃになって文字化けしていました。
「やってみた」ではこちらには全く修正内容が分かりませんが。
それと、いったいどのようなファイルを読んで arrayi に入れようとしているのでしょうか。ex,ey は幾つになっているのでしょう。
回答6件
あなたの回答
tips
プレビュー