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

时间:2012-10-24 19:42:23

标签: c

这是我的代码:

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]'

3 个答案:

答案 0 :(得分:4)

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

另外,在你的init函数中,你不能只是将字符串复制到数组中,你需要复制所有数据(作为带有strcpy的字符串或带有第二个循环的字符)或者只需将指针复制到字符串(以便将newArr变量设为char *newArr[5])。

如果这些都没有任何意义,那么你应该通过阅读C FAQ on this topic来了解你的C指针知识。

答案 1 :(得分:2)

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并拿起一本书。这将比你更好,更长久地为你服务。

答案 2 :(得分:-1)

这不是错误。这是一个警告。正如您所看到的,doSomething中的arr是一个双数组(可以使用双指针表示),但在init中,您只需要一个指针。将其更改为双指针**arrayarray[][]*