string_copy(my_array)
を実行しているときは、char (*)[100]
、つまりpointer to char[100] array
を関数に渡しています。しかし、あなたの関数はそのように定義されているので、あなたの関数はchar *[]
、すなわちarray of char pointers
を期待しています。
char *[]
の代わりに、char (*)[100]
となるように関数(string_copy()
)が変更されるように修正することで修正できます。このため
、あなたの関数定義を変更することができますように:
/* Your my_array gets converted to pointer to char[100]
so, you need to change your function parameter
from `char *pointer[]` to `char (*pointer)[100]`
*/
/* static void string_copy(char *pointer []) */
static void string_copy(char (*pointer) [100])
{
strcpy(pointer[0], "Hello ");
strcpy(pointer[1], "world");
}
異なる設計/ソリューションがそのように、あなたのmain()
機能に変更することです*
*代替ソリューションあなたはです。実際にはchar *[]
です。これはchar **
に崩壊します - これはです。このようにして、string_copy()
機能を変更する必要はありません。
int main(int argc, const char * argv[]) {
char my_array[10][100];
int tot_char_arrs, i;
char *char_arr_ptr[10];
/* Get total number of char arrays in my_array */
tot_char_arrs = sizeof(my_array)/sizeof(my_array[0]);
// Store all char *
for (i = 0; i < tot_char_arrs; i++)
char_arr_ptr[i] = my_array[i];
/* Actually passing a char *[].
it will decay into char **, which is fine
*/
string_copy(char_arr_ptr);
printf("%s%s\n", my_array[0], my_array[1]);
}
出典
2016-08-08 06:08:57
sps
使用チャー**とループ –
は、 "静的ボイドstring_array(CHAR **ポインタ[])" のよう?それはコンパイルされませんでした。 –