C - 将字符串数组作为函数参数传递

标签 c arrays string

我需要将一个预先分配的字符串数组作为函数参数传递,并将 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/

相关文章:

python: split() 效率 vs 字符抓取方法

python - Python 上的不规则字符串解析

c++ - 具有预处理器分支实现的结构是否违反了 ODR?

c - 如何使用Arduino的串口打印

c - FTP使用Socket编程

javascript - 使用 jQuery 根据值对 JSON 数组进行排序

python - 排列 numpy 数组以用二维彩色图表示物理排列

c - C 中的 HTML 标签检查

java - Java 中 <Array Name>.length 的时间复杂度或隐藏成本

excel - 循环字符串,在分隔符之间提取数据