• ベストアンサー

エラーの意味

subscripted value is neither array nor pointer というエラーが以下の部分に出ています。 どうすればよいのか教えてください。 strncpy( stock[ stock ].goods_cord, okay_goods.goods_cord, 10); strncpy( stock[ stock ].goods_name, okay_goods.goods_name, 40); stock[ stock ].price = okay_goods.price; printfGoods( stock[a] );

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

C においては, x[y] という式において「x と y の一方はポインタ型, もう一方は整数型」でなければなりません. したがって, 「stock[stock]」はいかなる場合でも意味的に間違っています. どちらかの stock が間違っているので, 適切な式に置き換えればいいんだけど, 何が「適切」かはこの文面では分かりようがないので自分で判断してください.

tonyemly
質問者

お礼

見直したところ間違っていました。 直してコンパイルしたらちゃんと動きました。ありがとうございました。

関連するQ&A

  • 関数 文字

    osはlinuxコンパイラはccです。 文字列を配列で定義したものが入力したものと同じかどうか調べその単語の意味を表示するにはどうしたらいいですか? ちなみに char *dic[5][2] = {{"book","本"}・・・{"grape",葡萄"}} のように英語と日本語の対応表を作成しています。 調べるときは、char型の配列c[20]にscanf("%s",&c)で入力したものを for(i=0;i<5;i++) { if(dic[i][0]==d) scanf("%s",dic[i][1]); } で調べています。 コンパイルしたら subscripted value is neither array nor pointer subscripted value is neither array nor pointer とでました。 ずうずうしいですが わかる方やさしい説明お願いします。

  • 計算結果をPOSTするには?

    お世話になります。 $array_sale_price1=array($row["stock1_price"],$row["stock2_price"],$row["stock3_price"]); $sale_price1_max=max($array_sale_price1); $sale_price1_true1=$sale_price1_max * $row["profit1"]; $sale_price1_true=ceil($sale_price1_true1); $sale_price1_true1_not_stock_name=$row["buy_price"] * $row["profit1"]; $sale_price1_true_not_stock_name=ceil($sale_price1_true1_not_stock_name); if (empty($row["stock1_name"]) and empty($row["stock2_name"]) and empty($row["stock3_name"])) { echo"<div class='sale_price1_case2'>"; echo "<input type = \"hidden\" name = \"sale_price1[$row[item_id]]\" value = \""; echo "$sale_price1_true_not_stock_name"; echo "\">"; echo"<p>"; echo "$sale_price1_true_not_stock_name"; echo"</p>"; echo"</div>"; } else { echo"<div class='sale_price1_case2'>"; echo "<input type = \"hidden\" name = \"sale_price1[$row[item_id]]\" value = \""; echo "$sale_price1_true"; echo "\">"; echo"<p>"; echo "$sale_price1_true"; echo"</p>"; echo"</div>"; } $stock1_price_null=0; if (empty($row["stock1_name"])) { echo"<div class='stock_contents_case1'>"; echo "<input type = \"hidden\" name = \"stock1_price[$row[item_id]]\" value =\""; echo $row["stock1_price_null"]; echo "\">"; echo"<p>"; echo "---"; echo"</p>"; echo"</div>"; } else { echo"<div class='stock_contents_case1'>"; echo "<input type = \"text\" name = \"stock1_price[$row[item_id]]\" value =\""; echo $row["stock1_price"]; echo "\" style='width:25px'>"; echo"</div>"; } 中略 //利幅1の設定 echo"<div class='sale_price1_case1'>"; echo "<input type = \"text\" name = \"profit1[$row[item_id]]\" value =\""; echo $row["profit1"]; echo "\" style='width:25px'>"; echo"</div>"; 中略 While文でデータを取得し、配列でデータを渡すことでデータを一括して更新するフォームを作っています。上記のソースような形で、sale_price1を他のデータ(stock1_price stock2_price stock3_price profit1)から計算して求めるフォームを作っているのですが、ボタンを一度押しただけではstock1_price stock2_price stock3_price profit1は更新されますが、計算結果が入るべきデータ(sale_price1)が更新されず、もう1回ボタンを押すと計算結果のデータがMySQLに格納されます。 よくよく考えて見れば、1回目にボタンを押した段階では計算結果(sale_price1)は修正前のstock1_price stock2_price stock3_price profit1で計算された計算結果(sale_price1)がポストされているので修正後の計算結果(sale_price1)がMySQLに格納されないという事が判明したのですが、修正後の値(フォームに新規に入力した値)から計算された値をPOSTするには、どうしたらよいのでしょうか? 色々な事を試してみたのですが、どうもうまくいきません。ご教授いただけましたら幸いです。よろしくお願いします。

    • 締切済み
    • PHP
  • List配列の検索

    インスタンス化されているJavaBeanがArrayListに数百~数千入っています。その配列から特定のJavaBeanのメンバーの内容が一致しているオブジェクトだけ取り出したいです。イテレーターを使って1個1個取り出してチェックして・・・というプログラムをゴリゴリ書いても良いのですが、SQLみたいに一致した条件のオブジェクトをまとめて取得するなんて事はできないのでしょうか? --- Goods.java --- import java.io.*; public class Goods implements Serializable{ private String name; private double price; private int stock; public Goods(){ } public Goods( String name, double price, int stock ){ this.name = name; this.price = price; this.stock = stock; } public String getName() { return name; } public void setName(String name) { this.name = name; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } public int getStock() { return stock; } public void setStock(int stock) { this.stock = stock; } } というBeanがあり、仮に下記ロジックでaddし検索 --- mainlogic --- ArrayList<Goods> goodsList = new ArrayList<Goods>(); goodsList.add( new Goods("ABC",123,10) ); goodsList.add( new Goods("DEF",456, 0) ); // ←該当オブジェクト goodsList.add( new Goods("GHI",789,15) ); goodsList.add( new Goods("JKL",987, 0) ); // ←該当オブジェクト ・・・ // ここでgoodsListに入っているGoodsオブジェクトのメンバーstock(在庫数)が0のGoodsオブジェクトを取得したい ・・・ という感じなのですが、SQLなら"SELECT * FROM goodsList WHERE Goods.stock = 0"で簡単に抽出できるのですが、このような事ってできないですよね? やはり、イテレーターで全件検索か、一旦、オブジェクトをDBに書き出して取り出すという事しかできないですよね? 他に何か良い方法などありましたら、ご教授お願い致します。

  • Smarty 三次元配列を使いたい

    最近Smartyを使い始めた者です。 以下のような多次元配列を、$smarty->assign('data', $data); します。 $data = array( [0] => array( [id] => 23 [comment] => 'aaa' [name] = array( [0] => 'xxx' [1] => 'yyy' )) [1] => array( [id] => 24 [comment] => 'bbb' [name] = array( [0] => 'zzz' )) [2] => array( [id] => 25 [comment] => 'ccc' [name] = array( [0] => 'ttt' [1] => 'uuu' )) ) そして、以下のようなテーブルを表示させたいのです。 |-------------------| | 23  | aaaa | xxxx | |    |     |------| |    |     | yyyy | |-------------------| | 24  | bbbb | zzzz | |-------------------| | 25  | cccc | tttt | |    |     |------| |    |     | uuuu | |-------------------| <td>タグのrowspan属性を使おうと思っています。 {foreach}をつかって、以下のようなものを書きましたが、駄目でした。 {foreach from=$data item=value01 name=kiji} <tr> <td rowspan="{$value01.numgoods}">{$value01.id}</td> <td rowspan="{$value01.numgoods}">{$value01.comment}</td> {foreach from=$value01 item=value02 name=goods} {if $smarty.foreach.goods.first} <td>{$value02.name.0]</td></tr> {else} <tr> <td>{$value.name.1}</td> </tr> {/if} {/foreach} {/foreach} エラー表示は、 syntax error: unrecognized tag: $value02.name.0 です 本当は、$value02.name の.0を三次元での要素数分だけ自動でループしてほしいのですが、その書き方がわかりません。 ネットをあさっても、これと言うサイトを見つけれません。 そもそも、三次元目の要素を取得するsmartyの方法がわかりません。 どなたかご教授の程、よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • while文で取得したデータ一覧の一括修正の仕方についてお教え下さい。

    お世話になります。 PHPの勉強中です。質問内容等に頓珍漢なものがあったらおゆるし下さい。 PHP+MYSQLで、ショッピングカートを試作しています。 在庫数を調整する際に1つ1つの商品の在庫数を個別の商品の修正画面か ら修正するよりも商品の一覧表で修正したいと考え、while文を使って商品 の一覧の入力フォームをWhile分で作成しました。 ------------------------------------------------------------------ while($row = mysql_fetch_array($result)){ echo "<form action = \"server_management_remove.php\" method = \"post\">"; echo"<div id='category_name_content'>"; echo"<p>"; echo$row["item_id"]; echo"</p>"; echo"</div>"; //-----価格1の設定----- $array_sale_price1 = array($row["stock1_price"],$row["stock2_price"],$row["stock3_price"]); $sale_price1_max = max($array_sale_price1); $sale_price1_true1 = $sale_price1_max * $row["profit1"]; $sale_price1_true = ceil($sale_price1_true1); echo"<div class='sale_price1_case1'>"; echo "<input type = \"text\" name = \"sale_price1\" value =\""; echo "$sale_price1_true"; echo "\" style='width:25px'>"; echo"</div>"; echo"<div class='sale_price1_case1'>"; echo "<input type = \"text\" name = \"profit1\" value =\""; echo $row["profit1"]; echo "\" style='width:25px'>"; echo"</div>"; echo"<div class='stock_contents_delete'>"; echo "<input type = \"hidden\" name = \"item_id\" value =\""; echo $row["item_id"]; echo "\">"; echo "<input type=\"submit\" value=\"更新\">"; echo "</form>"; echo"</div>"; echo"<div class='space'>"; echo"</div>"; } ?> ------------------------------------------------------------------ 上記のソース(文字数の関係で一部省略しています。)ですと、更新ボタ ンがそれぞれの商品ごとに設置されていて、1つづつ更新する分にはいい のですが、できれば、表の下にでも『一括更新』といったようなボタンを 設置して、一覧表に一気に入力して、最後に『一括更新』ボタンを押すと 修正した内容が一気にPOSTされるようにしたいと思っています。 そのような場合、修正した内容をすべてMySQLに格納するにはどうすれば よいでしょうか? PHPの勉強中ということもあり、どうすればいいのかの検討がついてい ません。ご迷惑かけますがよろしくご教授のほどお願いします。

    • ベストアンサー
    • PHP
  • array_multisortについて

    階層が深いのですが以下のような多次元配列があります。PHP5です。 $data['data'][0]['name'] = 'あああ'; $data['data'][0]['price0'] = '80'; $data['data'][1]['name'] = 'いいい'; $data['data'][1]['price0'] = '350'; $data['data'][2]['name'] = 'ううう'; $data['data'][2]['price0'] = '514'; これをprice0の値でソートしたく調べたところarray_multisortが使えそうで 以下のようにしてみましたがエラーになってしまいます。 array_multisort($price0, SORT_DESC, $data['data']); マニュアルを見たのですがよくわからずでどうすればうまくソートできるでしょうか?

    • 締切済み
    • PHP
  • smarty 条件文

    smartyで下記のコードがあり $goodsがarray()の状態で渡されてきた場合でも 一行空白が出力されてしまうので array()の場合、出力しないようにしたいのですが どのように記述すればよいでしょうか? <{foreach item=value from=$goods}> <{$value}><br /> <{/foreach}>

    • ベストアンサー
    • PHP
  • PHPでUndefined variableエラー

    PHPでUndefined variableエラーが発生します: <b>Notice</b>: Undefined variable: result in <b>/opt/lampp/htdocs/samples/chapter3/3-2/gen_defined_vars.php</b> on line <b>58</b><br /> どうやって直せばいいのか教えてください。 58行目がおかしいと出ていますが、$resultが未定義なので54行目のことだと思います。 ちなみに 9ー12行目は自分で直しました。お願いします。 1 <html> 2 <head> 3 <title>環境変数コード生成フォーム</title> 4 </head> 5 <body> 6 <?php 7 // 選択リストの値を取得 8 $name = "param"; 9 if ( isset($_POST[$name]) ) { 10 $selected_value = $_POST[$name]; 11 } 12 //$selected_value = isset($_POST[$name]) ? $_POST[$name] : ""; 13 14 // 定義済み変数を取得 15 $array = get_defined_vars(); 16 17 // 配列から選択リストを作成する関数 18 // パラメータ:配列/選択リスト名/選択値 19 function disp_list($array, $name, $selected_value = "") { 20 echo "<select name=\"" . $name . "\">"; 21 while (list($value, $text) = each($array)) { 22 echo "<option "; 23 if ($selected_value == $value) { 24 echo " selected "; 25 } 26 echo " value=\"".$value."\">" . $value . "</option>"; 27 } 28 echo "</select>"; 29 } 30 31 // 入力内容を処理する 32 $temp = "<?php echo \$_SERVER[\"%s\"] ?>"; 33 if (isset($_POST["param"])) { 34 $param = $_POST["param"]; 35 $result = sprintf($temp, $param); 36 } 37 else { 38 $param = ""; 39 } 40 41 ?> 42 <form method="POST" action="<?php echo $_SERVER["PHP_SELF"]?>"> 43 <table cellpadding="10"> 44 <tr> 45 <td>環境変数を選択:<br /> 46 <?php echo disp_list($array["_SERVER"], $name, $selected_value); ?> 47 <input type="submit" value="作成" name="sub1"> 48 </td> 49 </tr> 50 <tr> 51 </tr> 52 <tr> 53 <td>作成されたコード:<br /> 54 <textarea name="ta1" rows="3" cols="40"><?php echo $result ?></textarea> 55 </td> 56 </tr> 57 </table> 58 </form> 59 </body> 60 </html>

    • ベストアンサー
    • PHP
  • 多次元配列をエンコードする関数を作るには?

    多次元配列でも文字コードのエンコードができる関数を 作ろうとしていますが、エラーで躓いています。 自分自身の関数を再帰で呼び出しているので、array_map関数上? 引数が1つしか持てないので、$valueを array($ary, "SJIS", "EUC-JP")として渡しています。 これを実行すると、以下のエラーになります。 何かよい方法はありますか? PHP Notice: Undefined offset: 0 in C:\test.php on line 10 function mb_convert_encoding_deep($value) { //var_dump($value); if( is_array($value) ){ if( is_array($value[0]) ){ array_map(__FUNCTION__, $value); }else{ $value[0] = mb_convert($value[0], $value[1], $value[2]); } }else{ die("ここは通過しないと思いますが自信なし"); } return $value; } $ary = mb_convert_encoding_deep( array($ary, "SJIS", "EUC-JP") ); array_mapの用法でも間違っているのでしょうか?

    • ベストアンサー
    • PHP
  • ?name=%94%E9%89%D8の表示

    $stock = array ( "./cgi-bin/photobbal25.cgi?name=%94%E9%89%D8"=>"143時間:43分:05秒", "./cgi-bin/photobbal25.cgi?name=naomi"=>"143時間:43分:05秒", "./cgi-bin/photobbal25.cgi?name=%82%D0%82%EB%82%DD"=>"117時間:31分:29秒") foreach($stock as $key => $value) { print "$key\n;" print "{$value}\n"       print "      \n" //ここに表示したい } 上記はPHPのコードです ?name=%94%E9%89%D8の %94%E9%89%D8を日本語で表示したい よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう