Когда вы делаете string_copy(my_array)
, вы передаете char (*)[100]
, то есть pointer to char[100] array
к вашей функции. Но ваша функция ожидает char *[]
, т. Е. array of char pointers
, потому что вы определили свою функцию таким образом.
Вы можете исправить это, внеся изменения, чтобы ваша функция (string_copy()
) ожидала char (*)[100]
, а не char *[]
.
Для этого, вы можете изменить определение функции, как:
/* 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()
. Таким образом, вам не придется менять функцию 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]);
}
Используйте символ ** и цикл –
Как и в «статическом аннулируются string_array (полукокс ** указатель [])»? Это не скомпилировалось. –