我有一个字符串数组。基本上是一个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;
}
答案 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字符串)。