我正尝试通过以下代码中的函数来更新数组,但效果很好。
char bookCategory[][MAX_CATEGORY_NAME_LENGTH] = {"Computer", "Electronics", "Electrical", "Civil", "Mechnnical", "Architecture"};
uint8_t getCategoryNumAndName(char* catName, uint8_t choice)
{
choice = choice - 0x30 - 1; /** Category starts from 1 on the screen */
if (choice >= (sizeof (bookCategory) / sizeof (bookCategory[0])))
{
//catName = NULL;
return (0xff);
}
else
{
strcpy(catName,bookCategory[choice]);
//catName = bookCategory[choice];
return(choice);
}
}
void addBooks(void)
{
// Some code here
char categoryName[30];
uint8_t catNumber;
catNumber = getCategoryNumAndName(categoryName, choice);
// Some code here
}
但是我想到了使用双指针而不是使用strcpy()。我尝试下面的代码,但出现不兼容的指针类型错误。如何从addBooks()的以下代码中调用getCategoryNumAndName()?
uint8_t getCategoryNumAndName(char** catName, uint8_t choice)
{
choice = choice - 0x30 - 1; /** Category starts from 1 on the screen */
if (choice >= (sizeof (bookCategory) / sizeof (bookCategory[0])))
{
*catName = NULL;
return (0xff);
}
else
{
//strcpy(catName,bookCategory[choice]);
*catName = bookCategory[choice];
return(choice);
}
}
void addBooks(void)
{
// Some code here
char categoryName[30];
uint8_t catNumber;
catNumber = getCategoryNumAndName(&categoryName, choice);
// Some code here
}
答案 0 :(得分:0)
您只能将指针地址传递给getCategoryNumAndName
函数,而不能传递给数组地址。
您可以执行以下操作。
char *categoryName = NULL;
catNumber = getCategoryNumAndName(&categoryName, choice);
在取消引用之前,请确保将内存分配给categoryName
中的getCategoryNumAndName
。
答案 1 :(得分:-1)
要仅使代码起作用,您需要将categoryName强制转换为char**
。但是阅读您的代码,似乎只是想移动指针?类别名称不需要固定大小的数组。只需使用一个指针:
char* categoryName;