72764


配列に文字列を追加していく関数を作りたいのですが、どうしても警告が出てしまいます。

ポインタを渡すべきところでダブルポインタを渡していることが原因なのは分かっているのですが、具体的にどう対処すれば良いか分かりません。  
どなたか教えてください。

[code]

    main.c:13:16: warning: passing argument 1 of 'definition' from incompatible pointer type [-Wincompatible-pointer-types]
       13 |     definition(array);
          |                ^~~~~
          |                |
          |                char (*)[10]
    main.c:5:23: note: expected 'char *' but argument is of type 'char (*)[10]'
        5 | void definition(char *array) {
          |                 ~~~~~~^~~~~
    
[/code]

[code]

    #include <stdio.h>
    #include <string.h>
    
    void definition(char *array) {
        strcpy(array, "apple");
        strcpy(array + 10, "banana");
        strcpy(array + 20, "orange");
    }
    
    int main() {
        char array[3][10];
        definition(array);
        for (int i = 0; i < 3; i++) {
            printf("%s\n", array[i]);
        }
    }
    
[/code]


CC BY-SA 4.0
2020-12-19T13:21:50.063
72763
2020-12-19T16:24:09.943
2020-12-19T16:24:09.943
3060
43208
question
c
C言語でポインタに関する警告を消したい


こんな感じでどうでしょう。

[code]

    #include <stdio.h>
    #include <string.h>
    
    #define SIZE 10
    
    void definition(char (*array)[SIZE], int num) {
        static const char* ps[] = { "apple" , "banana" , "orange" };
        for (int i = 0; i < num; ++i) {
            strcpy(array[i], ps[i]);
        }
    }
    
    int main(void)
    {
        char array[3][SIZE] = {""};
        int num = sizeof array / sizeof array[0];
        definition(array, num);
        for (int i = 0; i < num; i++) {
            printf("%s\n", array[i]);
        }
    }
    
[/code]


CC BY-SA 4.0
2020-12-19T14:02:38.980
72764
2020-12-19T14:02:38.980
41756
72763
answer