1列の文字列を配列化する方法を教えてください。
メモリの確保らしいのですが、参考になるソースが拝見できれば嬉しく・・・main から参照したいです。

char Text[] = "AAAA\nBBBB\nCCCCCCCC\nDDD\n";
 ↓

char str[0] = "AAAA";
   str[1] = "BBBB";
   str[2] = "CCCCCCCCC";
   str[3] = "DDD";

どうやったらいいのか全くイメージがわかないので、
よろしく御願いします!

このQ&Aに関連する最新のQ&A

A 回答 (4件)

「あくまで変換、するというところがキーなのです」


というのが、どういう意味かいまいち不明ですが、
普通なら、strtokでやるのが一番簡単でしょう。

メモリの確保なんて全然してませんが、適当な例です。
(コンパイルも行っていません)
int main()
char text[100], *str[10], *p;
int i;
strcpy(text, "AAAA\nBBB....");
i=0;
for(p=strtok(text,"\n"); p!=NULL; p=strtok(NULL,"\n")) {
str[i++] = p;
if(i==10)break;
}
.....
}
str[?]には、"AAAA"等の文字列ポインタが入りますが
これらはtext変数上の領域です。
(text変数内の"\n"は"\0"に変換されてます!)
まずい場合は、mallocした上で、コピーするなどします。

strtokを使うのがイヤで自前でするなら、strchrなどで
改行文字を地道に探すしかないでしょう。
    • good
    • 0
この回答へのお礼

専門家からのご回答ありがとうございます。

お礼日時:2003/09/13 14:56

あくまで私の場合はこうやると言う例です。


コンパイルしてないので、うまく動かないかもしれないがその場合は自分で直して下さいね。
(全角でインデントしているので注意)

char Text[] = "AAAA\nBBBB\nCCCCCCCC\nDDD\n"
char str[10][20];
int len = strlen(Text),cnt,cnt1=0,cnt2=0;
for(cnt=0;cnt<len;cnt++)
{
  if(Text[cnt]=='\n')
  {
    cnt1++;
    cnt2=0;
    continue;
  }
  str[cnt1][cnt2++]=Text[cnt];
}
malloc等は使っていませんので必要ならば直して下さい。
    • good
    • 0
この回答へのお礼

ありがとうございます。
参考になりました。

お礼日時:2003/09/13 14:57

char str[0] = "AAAA";


   str[1] = "BBBB";
   str[2] = "CCCCCCCCC";
   str[3] = "DDD";
 ↓
char Text[] = "AAAA\nBBBB\nCCCCCCCC\nDDD\n";
への変換のほうがコストが安いので

最初から
char* str[] = {
 "AAAA",
 "BBBB",
 "CCCCCCCCC",
 "DDD",
 NULL
};
と宣言するば
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2003/09/13 14:56

strtokで\n毎に取り出して


各配列に入れるというのはだめなのですか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
あくまで変換、するというところがキーなのです。

お礼日時:2003/09/11 22:40

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング

おすすめ情報