这是我的代码:
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]'
答案 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/info和C FAQ并拿起一本书。这将比你更好,更长久地为你服务。
答案 2 :(得分:-1)
这不是错误。这是一个警告。正如您所看到的,doSomething中的arr
是一个双数组(可以使用双指针表示),但在init中,您只需要一个指针。将其更改为双指针**array
或array[][]*