- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:プログラミング時の警告(キャスト)について)
プログラミング時の警告(キャスト)について
このQ&Aのポイント
- C言語において、char型の数字の配列をint型の数字の配列に変換し、関数に渡す際に生じる警告について質問があります。
- atoi関数を使用する際に特定の書き方をすると「pointer from integer without a cast」という警告が表示されますが、別の書き方をすると警告がなくなることに気付きました。
- 最初の書き方では何が問題なのかについて教えていただけませんか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> pointer from integer without a cast 「整数をキャストせずにポインタに変換している」という警告ですね。 hogehogeに渡すのは、int*なのでしょう。 atoiはintを返すので、intからint*への変換が必要となり、警告されます。 > copy[20] = atoi(array); これは、copyという配列の21番目の要素に、atoiの結果を代入しています。 が、copyは20個しか要素を持っていないので、この操作はいけません。 そもそも、やりたい操作と書いているコードが違っているように思います。 array[0]を変換した結果をcopy[0]に、array[1]を変換した結果をcopy[1]に、... としたいのであれば、ループなどを使ってやる必要があります。 atoiは渡されたchar*を文字列として認識するので、arrayの中の文字1つ1つを変換するわけではありません。だから、返ってくるのがint 1つだけになります。
その他の回答 (2)
- notnot
- ベストアンサー率47% (4900/10358)
回答No.3
>最初の書き方だと何がいけないのでしょうか? あなたが、hogehoge()という関数の呼び出し方を知らない、もしくは間違っているというのがいけないです。 後半のプログラムは根本から間違っているので、消して忘れてしまいましょう。 やることは、 1.hogehoge() という関数の呼び出し方を調べる 2. 正しい呼び出し方になるようにプログラムを修正する です。
質問者
お礼
関数の使い方はわかってるつもりなのですが… 後半のプログラムは間違ってますね; 回答ありがとうございました
- asuncion
- ベストアンサー率33% (2127/6289)
回答No.2
hogehoge が何者なのかわかりませんので、何も答えられません。
質問者
お礼
不備がありすぎる質問ですみません… no1の方の解釈です。
お礼
回答ありがとうございます。 atoiが返すのはintなのになんでエラーなんだろうと思ってたのですが、 配列を関数に渡すのだからポインタじゃないと駄目だから警告だったのですね! ポインタはまだ使いこなせていないので気づけませんでした… それと、おっしゃるとおり、やりたいことと書いてあるコードが間違ってました… 私がやりたいことは答えてくださったことです^^ 質問内容すらまちがっていたのに、私が一番欲しい回答をして頂きありがとうございました!