質問: どうすれば二次元配列に文字列をscanfで格納できるのでしょうか? またある関数内でその文字列を書き換えたい時、関数の仮引数はどのように記述すればよいでしょうか? 複数の文字列を受け取る前提でお願いします またinclude〈stdio.h〉内の関数のみ使う方向でお願いします。
回答: 投稿者さんの欲しいプログラムと違う内容かもしれませんので、そのときは追記等お願いします。 ``` #include //もし置き換えた文字列を返す関数を作るなら //配列は返り値としては受け取ることができないため //代わりにポインタを使って返すことになります //今回は返り値なしとします void replace_string(int number, int length, char strings[number][length], char replace_target[] ) { //いろいろ書きます } int main() { int number; int length; //配列の初期化に必要です printf("文字列の行数と最大長を打ち込んでください\n"); scanf("%d %d", &number, &length); //エンターキー(\n)の入力を取り除く getchar(); //+2の理由は次のfor文の中で char array[number][length + 2]; for(int i = 0; i < number; i++) { printf("%d番目に格納する文字列\n" , i + 1); //普通に入力しようとすると末尾に\nと\0が付くので+2 fgets(array[i], length + 2, stdin); } printf("格納した文字列をすべて表示します\n"); for(int i = 0; i < number; i++) { printf("%s\n", array[i]); } //置き換えるならこんな感じですかね? //呼び出すことはできました replace_string(number, length, array, "hogehoge"); } ``` 参考資料: fgetsとscanfの挙動の違いについて https://bituse.info/c/47 2次元配列を引数に加える方法 https://qiita.com/Hiraku/items/babed27bc1d750c2e12d