前提・実現したいこと
任意の個数の任意の長さの文字列の領域を動的に確保したい、参照したい。
以下の問題をC言語で解くにあたり、障害が発生したのでお力添えください。
https://atcoder.jp/contests/abc042/tasks/abc042_b
辞書順に文字列を連結するというシンプルな問題なのですが、
文字列について、
最初に任意の個数の任意の長さをユーザーに入力させるという仕様があります。
制約に従って当初から静的に文字列の個数や長さを定義することもできるのですが、
理解を深めるために動的に領域を確保することにチャレンジしたいと思います。
mallocをつかった場合 文字列の個数、文字列+ヌル文字分の1で必要な領域は確保できると思うのですが、
その呼び出し方法(S[i])が間違っているのか正常にprintされません。
どこが間違っているのかご指摘いただけますでしょうか?
該当のソースコード
C言語
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4 5int main(void){ 6 int N,L; 7 char *S; 8 scanf("%i %i", &N,&L); 9 10 S = malloc(sizeof(char)*N*(L+1)); //**任意の個数の任意の長さの文字列の領域を動的に確保する方法はこれで正しいのか?** 11 for (int i=0; i<N; i++){ 12 scanf("%*s",N,S[i]); 13 } 14 //qsort(S,N,sizeof(*S),(int(*)(const void *, const void *))strcmp); まだ未検証の部分です 15 16 17 //以下のループが正常に実行されていないようです(各インデックスの文字列の内容がprintされない) なにが間違っているのでしょうか? 18 for(int i=0; i<N; i++){ 19 printf("%s",S[i]); 20 } 21 22 23 free(S); 24 25 return 0; 26 27}
補足情報
42tokyoの試験が控えており、C言語で学習しています。(本当は3月試験の予定でしたが、コロナの影響で・・・)
回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/19 14:15