繁体   English   中英

C-如何通过引用将字符串数组传递给另一个函数?

[英]C - How to pass an array of strings to another function by reference?

这是我的代码:

void doSomething(){
    char arr[5][10];
    arr[1] = "Bob";
    arr[2] = "Steve";
    arr[3] = "Tim";
    arr[4] = "Ruth";
    arr[5] = "Heather";
    init(arr);

void init(char *array){
    int i;
    newArr[5][10];
    for(i=0; i<5; i++){
        newArr[i] = *(array + i);
    }
}

我不断收到错误消息:

警告:从不兼容的指针类型传递'init'的参数1 [默认启用]注意:预期为'char ',但参数类型为'char( )[10]'

您的数据是二维数组,因此您的函数需要为此使用一个指针数组(即char (*array)[10]char array[][10] )。

同样,在您的init函数中,您不仅可以将字符串复制到数组中,还需要复制所有数据(作为带strcpy字符串或具有第二个循环的逐个字符),或仅将指针复制到字符串(因此,使您的newArr变量为char *newArr[5] )。

如果这一切都没有道理,那么您可能应该通读有关此主题C FAQ,以掌握C指针的知识。

1)在C语言中没有字符数组分配使用strcpy()并且数组从0开始而不是1:

#include <string.h>
void doSomething(){
    char arr[5][10];
    strcpy(arr[0], "Bob");
    strcpy(arr[1], "Steve");
    strcpy(arr[2], "Tim");
    strcpy(arr[3], "Ruth");
    strcpy(arr[4], "Heather");
    init(arr);
}

2) init()获取指向char数组的指针; 未声明newArr[][] ,添加char 在源代码的开头添加一个用于init()的声明。 最后但并非最不重要的一点:再次将赋值替换为strcpy()

void init(char (*array)[10]);

void doSomething() {...}

void init(char (*array)[10]){
    int i;
    char newArr[5][10];
    for(i=0; i<5; i++){
        strcpy(newArr[i], array[i]);
    }
}

最后,这可能很无聊,但请查看https://stackoverflow.com/tags/c/infoC FAQ并挑选一本书。 这将比我能为您提供更好,更长久的服务。

那不是错误。 这是一个警告。 如您所见,在doSomething中的arr是一个双精度数组(可以使用双精度指针表示),但是在初始化中,您仅采用了单个指针。 将其更改为双指针**arrayarray[][]*

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM