Wenn Sie dabei sind string_copy(my_array)
, übergeben Sie eine char (*)[100]
, d. H. pointer to char[100] array
an Ihre Funktion. Aber Ihre Funktion erwartet eine char *[]
, d. H. array of char pointers
, weil Sie Ihre Funktion auf diese Weise definiert haben.
Sie können dies beheben, indem Sie Änderungen vornehmen, damit Ihre Funktion (string_copy()
) eine char (*)[100]
anstelle einer char *[]
erwartet.
Dazu können Sie Ihre Funktionsdefinition ändern:
/* 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");
}
* Alternative Lösung *
Ein anderes Design/Lösung in Ihrer main()
Funktion würde sich ändern, so dass Sie sind tatsächlich übergibt eine char *[]
, die in eine char **
zerfällt - was in Ordnung ist - zu string_copy()
. Auf diese Weise müssten Sie Ihre string_copy()
Funktion NICHT ändern.
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]);
}
Verwendung char ** und eine for-Schleife, wie in –
"static void string_array (char ** pointer [])"? Das hat nicht kompiliert. –