如何将数组字符串传递给c函数?

时间:2016-11-21 23:21:00

标签: c string function

我有一个字符串数组。基本上是一个2d字符数组。

//Array to hold ip address of people on local network
char* ipArray[100][17];

我如何声明和编写一个传入此数组的函数,以便在函数内部我可以添加ip地址或字符串到数组?

这就是我现在所拥有的,我收到错误error: array type 'char *[17]' is not assignable

//This function takes a string and returns the ip adress
void addIP(char* str, int index, char* arr[][17]){

//Add the ip address to the index that was passed in.
arr[index] = str;


}

2 个答案:

答案 0 :(得分:0)

如果要在数组中存储实际字符(而不是指针),则应将数组声明为char ipArray[100][17](类似于函数的参数)。然后,在函数内部,您需要使用str或类似内容将arr[index]复制到strcpy。您还需要确保字符串的长度小于17。

答案 1 :(得分:0)

正如其他人所提到的,char* var[n][n2] 不是一个字符串数组。而是一个包含100个插槽的数组,其中每个插槽可以包含17个指向字符的指针,而不是字符本身(如果你想得到它,你可以将它用作具有常量指针或动态内存的3D数组,但不要去那里)。

如果你只是想要一个数组,其中每个插槽可以通过a[slot] = str指向一个字符串,这是一回事。但您可能希望将整个字符串复制到其中,因此您需要使用memcpy(或许多其他变体,如strcpy等)并更正数组声明char var[n][n2]

<强>的main.cpp

#include <string.h>
#include <stdio.h>

//This function takes a string and returns the ip adress
void addIP(char* str, int index, char arr[][17])
{
    //Add the ip address to the index that was passed in.
    memcpy(arr[index], str, strlen(str));
}

int main()
{
    //Array to hold ip address of people on local network
    char ipArray[100][17];

    // Clean array and check starting contents.
    memset(ipArray, 0, sizeof(ipArray));
    puts("-------------------------\nStarting array:\n");
    for (int i = 0; i < sizeof(ipArray) / sizeof(ipArray[0]); i++)
    {
        printf("ipArray[%i] = %s\n", i, ipArray[i]);
    }

    addIP("127.0.0.1", 0, ipArray);

    // Check contents.
    puts("-------------------------\nModified array:\n");
    for (int i = 0; i < sizeof(ipArray) / sizeof(ipArray[0]); i++)
    {
        printf("ipArray[%i] = %s\n", i, ipArray[i]);
    }

    return 0;
}

确保您知道正确尺寸时您正在做什么。如果存在风险,字符串可能比您在数组中声明的字符串大,那么您就会遇到麻烦。另外,要小心null终止(定义C字符串)。