我需要将一个预先分配的字符串数组作为函数参数传递,并将 strcpy() 传递给字符串数组中的每个字符串,如下例所示:
static void string_copy(char * pointer[]) {
strcpy(pointer[0], "Hello ");
strcpy(pointer[1], "world");
}
int main(int argc, const char * argv[]) {
char my_array[10][100];
string_copy(my_array);
printf("%s%s\n", my_array[0], my_array[1]);
}
打印出来的字符串会是“Hello world”。
如上所示,如何传递预先分配的字符串数组并填写函数中的每个字符串?
最佳答案
当您执行 string_copy(my_array)
时,您将传递一个 char (*)[100]
,即 指向 char[100] 数组的指针
到你的函数。但是您的函数需要一个 char *[]
,即 char 指针数组
,因为您已经以这种方式定义了您的函数。
您可以通过更改来解决此问题,以便您的函数 (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]);
}
关于C - 将字符串数组作为函数参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38822148/