对于我正在进行的赋值,我需要使用函数来操作字符串数组中的数据。真的,一系列字符数组。我这样定义数组:
char strings[5][100];
因此在内存中可能有500个连续的字符。我定义的函数如下所示:
void foo(char *labels[100]);
我想我可能会遇到一些语法问题,但我认为这样做是在说“我是一个需要指向100个字符数组的指针的函数。”所以labels*
指向第一个字符数组,(labels + 1)*
指向第二个字符串,依此类推。我正在调用这样的函数:
foo(&strings[0]);
我认为这样做是抓取strings
中第一个字符数组的地址。我收到的错误消息告诉我函数需要char **
,但参数是char (*)[100]
。这让我很困惑,因为我没有指定指向char
的指针。
非常感谢您提供任何帮助,或者如果您pointer
我朝着正确的方向前进:)
答案 0 :(得分:4)
strings
是一个二维数组。因此,当传递给函数时,它会衰减到char(*)[100]
。相反,你可以像 -
void foo(char labels[][100], int row); // `row` decides which param to access.
void foo(char labels[][100], int row)
{
for(int i = 0; i < 100; ++i) // If you need, modify all the 100 row elements
{
labels[row][i] = 'a'; // Modifying like this
// ....
}
}
答案 1 :(得分:4)
char strings[5][100]
将strings
声明为包含5个元素的数组。每个元素都是100个字符的数组。
void foo(char *labels[100]);
将foo
声明为返回void并接受指针数组的函数。 ( 100只是装饰:把它留空或放42或10000是完全相同的事情)
你想要
void foo(char (*labels)[100]);
其中参数是指向恰好100个字符的数组的指针。