Discussion:
2次文字配列の関数への受け渡しについて
(too old to reply)
unknown
2010-04-16 08:44:01 UTC
Permalink
一つの文字列から10程度の小さい文字列を切り出すのに
毎回関数を作るのが面倒なので、標準化した関数を作りたいと考えています。
例えば1文字列から3つの小文字列を切り出すとしたら
int takeout_moji3(char *moto_moji,cha *moji1,char *moji2,char *moji3)と
するのを ko = 3;
int takeout_moji_n(char *moto_moji,char moji[ko][25],int ko);
のようにしたい訳です。
残念ながら、これではエラー、もしくは警告が出てアウトになります。
グローバル変数を使えばややこしくないのですが、こうしたちょっとした
関数には出来るだけローカル変数だけで処理できれば、有効な作業関数として
使えるので質問致しました。
UETA, Shin-ichi
2010-04-16 12:25:12 UTC
Permalink
こんにちは、植田です。
Post by unknown
int takeout_moji3(char *moto_moji,cha *moji1,char *moji2,char *moji3)と
するのを ko = 3;
int takeout_moji_n(char *moto_moji,char moji[ko][25],int ko);
のようにしたい訳です。
たとえば、こんな感じ?

void f(const char* s, char a[][25], size_t n)
{
for (size_t i = 0; i < n; ++i)
{
sprintf(a[i], "%s%d", s, i);
}
}

char a[3][25];
f("hogehoge", a, 3);

結果:

- a 0x0012ff04 char [3][25]
+ [0] 0x0012ff04 "hogehoge0" char [25]
+ [1] 0x0012ff1d "hogehoge1" char [25]
+ [2] 0x0012ff36 "hogehoge2" char [25]
--
植田システム設計事務所
Ueta System Design Studio
http://www.usdesign.jp/
植田真一
mailto:***@usdesign.jp
unknown
2010-04-19 09:43:01 UTC
Permalink
植田さん。

上田です。
Post by UETA, Shin-ichi
void f(const char* s, char a[][25], size_t n)
ご示唆のように色々とやってみたのですが、警告文が出て結局だめした。
C4047が代表的な警告になります。間にポインタのポインタをかませたり
したのですが、何れもうまく行きませんでした。
趣旨をもう一度述べますと
呼出側関数内で二次元配列特に文字列を想定
例えば、char a[3][25]と宣言し、呼出先関数内で二次元配列に取り込み
呼出側で利用する意図です。ひとつづつと文字列を書けば実現できるのですが
一般化した関数にするには二次元の方が使い勝手が良いと思ったので。
UETA, Shin-ichi
2010-04-19 18:56:43 UTC
Permalink
どうも、植田です。
Post by unknown
Post by UETA, Shin-ichi
void f(const char* s, char a[][25], size_t n)
ご示唆のように色々とやってみたのですが、警告文が出て結局だめした。
C++だからかな? と思ってCでコンパイルしてみましたが、
特に問題はないですけどねぇ...。
関数に二次元配列を渡して何かしら書き出させるという
点ではサンプルコードも同じです。

ちなみに、char a[][25] は char (*a)[25] と同じ意味で、
char[25]がn個並んでいる二次元配列を参照します。

C4047の警告なら、単純にポインタの使い方を間違えて
いるだけだと思いますよ。
--
植田システム設計事務所
Ueta System Design Studio
http://www.usdesign.jp/
植田真一
mailto:***@usdesign.jp
Continue reading on narkive:
Loading...