上記写真のような問題に取り組んでいるのですが、ネットでどれだけ調べてもここでのポインタのポインタについての理解ができなかったので質問させていただきます。下のコードが僕の書いたものなのですが、output_strings_reverse関数の引数にどうしてポインタのポインタを使うのかわかりません。素人の自分からすると単にポインタstr_pを受け渡して*array_pを受け取ればいい気がするのですが、それでコードを書いてもうまくいかなかったのでだめなのでしょう。
質問は、ここでポインタのポインタを使わなければならない理由と、output_strings_reverse関数をどのようにすれば良いのかも教えてくれたら幸いです。
c
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4 5#define NUM_STRING 20 //文字列の最大個数 6#define MAX_LEN 100 //文字配列のサイズ(入力文字列の最大長さ+1) 7 8//文字列の画面出力用関数(逆順) 9void output_strings_reverse(char **array_p, int m) 10{ 11 int i; 12 printf("%d\n", m); 13 for(i=m-1; m>=0; m--) { 14 printf("%s\n", *array_p[i]); 15 } 16} 17 18 19int main( void ) 20{ 21 int i; 22 int n; //文字列の個数 23 char data[MAX_LEN]={}; //入力用文字列 24 char *str_p[NUM_STRING]; //文字列へのポインタを格納するポインタ配列 25 26 //i〜iiiの処理 27 for(i=0; i<20; i++) { 28 //iの処理 29 printf("Input strings -> "); 30 scanf("%s", data); 31 printf("%s\n", data); 32 if(strcmp(data, "end") == 0) break; 33 //iiの処理 34 *str_p[i] = (char *)malloc(strlen(data) + 1); 35 strcpy(*str_p[i], data); 36 37 } 38 39 40 //文字列の画面出力 41 output_strings_reverse(&str_p, i); 42 43 //動的確保した領域の開放 44 free(*str_p); 45 46 47 return 0; 48}
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/16 11:51
2021/04/16 12:55