関数に引数を渡す際に
note: expected 'char ()[20]' but argument is of type 'char **'
このような警告が出ます。
char ()[20]型で渡すべきところを、ダブルポインタで渡してしまっているのが原因なのは分かるのですが
どう書けばダブルポインタを、char (*)[20]型として関数に渡せるでしょうか?
main.c: In function 'main': main.c:34:18: warning: passing argument 1 of 'str_to_array' from incompatible pointer type [-Wincompatible-pointer-types] 34 | str_to_array(args); | ^~~~ | | | char ** main.c:11:26: note: expected 'char (*)[20]' but argument is of type 'char **' 11 | void str_to_array(char (*array)[Y]) { | ~~~~~~~^~~~~~~~~
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4 5#define X 100 6#define Y 20 7 8// 受け取った文字列を空白区切りで配列に格納していく 9void str_to_array(char (*array)[Y]) { 10 char *str = (char*)malloc(sizeof(char) * 256); 11 char *token; 12 13 fgets(str, 256, stdin); 14 str[strlen(str)-1] = '\0'; 15 16 token = strtok(str, " "); 17 int idx = 0; 18 while (token != NULL) { 19 strcpy(array[idx], token); 20 idx++; 21 token = strcpy(NULL, " "); 22 } 23 free(str); 24} 25 26int main() { 27 //args[100][20] <- これを動的確保で作る 28 char **args = (char**)malloc(sizeof(char) * X); 29 for (int i = 0; i < X; i++) { 30 args[i] = (char*)malloc(sizeof(char) * Y); 31 } 32 //関数にchar(*)[20]型として渡したい 33 str_to_array(args); 34 //メモリの解放 35 for (int i = 0; i < X; i++) { 36 free(args[i]); 37 } 38 free(args); 39}
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/20 02:23
2020/12/21 00:22
2020/12/21 00:54