我有一个函数可以执行多次,并且我只希望变量在第一次运行时声明一次,因为要检查的变量的完整列表,所以我使用了static const
进行声明这些变量在函数中。
我想将static const char
数组之一传递给从此函数内调用的函数。我尝试使用指针并通过引用传递,但是我不断遇到不兼容的参数类型错误,说const char *
与参数不兼容。
如何将静态const char数组传递给函数?对我来说,在函数中声明它们是没有意义的,因为它是一个列表,并且该函数仅应检查其中之一,将其作为参数传递时很容易做到。
功能1:
void searchFunc(int numOfBytes, char msgtxt[]) {
static const char msg1[] = { 0x11, 0xFF };
static const char msg1resp[] = { 0x0066, 0x03, 0xFF, 0x55, 0x00, 0x83 };
static const char msg2[] = { 0x03, 0x00, 0x6A };
static const char msg2resp[] = { 0x00, 0x05, 0x42, 0x1A, 0x80, 0x5A };
if (num == 5) {
respond(msgtxt, 2, 4, msg1, msg1resp);
} else if (num == 6) {
respond(msgtxt, 2, 5, msg2, msg2resp);
}
}
函数2定义有错误:
void respond(char msgtxt[], int startArr, int endArr, char commandmsg[], char responsemsg[]);
“ const char *”类型的参数与“ char *”类型的参数不兼容
答案 0 :(得分:3)
您不能将const
指针传递给带有指针的函数。
static const char msg1[] = { 0x11, 0xFF };
声明msg1
为const char*
,但是respond()
接受char msgtxt[]
,即char*
作为参数。
因此,要执行此操作,您的respond
函数应具有签名
void respond(const char*, int, int, const char*, const char*);
一般规则:未修改的对象的引用和指针应为const
。这也适用于您的searchFunc()
:
void searchFunc(int numOfBytes, const char*msgtxt) { ... }