Назначить список char*
Объясните на простом примере. Как передать char*
в функцию?
#define name1 "ABCD"
#define name2 "EFGH"
#define name3 "HIJK"
char *list[3] = {};
void printList(char *l, int x) {
for (int i = 0; i < x; i++) {
Serial.println(l[i]);
}
}
void setup() {
// поместите сюда код установки для однократного запуска:
Serial.begin(115200);
Serial.println("start");
list[0] = name1;
list[1] = name2;
list[2] = name3;
printList(list, 3);
}
void loop() {
// поместите сюда ваш основной код для многократного запуска:
}
Я получаю сообщение об ошибке:
/home/guy/Documents/Dropbox/Arduino/sketch_jun12a/sketch_jun12a.ino: In function 'void setup()':
sketch_jun12a:24:13: error: cannot convert 'char**' to 'char*'
24 | printList(list, 3);
| ^~~~
| |
| char**
/home/guy/Documents/Dropbox/Arduino/sketch_jun12a/sketch_jun12a.ino:7:22: note: initializing argument 1 of 'void printList(char*, int)'
7 | void printList(char *l, int x) {
| ~~~~~~^
exit status 1
cannot convert 'char**' to 'char*'
@Guy . D, 👍1
Обсуждение1 ответ
Лучший ответ:
Просто измените это:
void printList(char *l, int x) {
к этому:
void printList(char **l, int x) {
Хорошо, это заслуживает некоторого объяснения...
В C и C++, когда вы используете (а не когда вы определяете) массив идентификатор, он распадается до указателя на его первый элемент. В в этом случае
char *list[3] = {};
является массивом указателей на char
. Когда вы используете его здесь:
printList(list, 3);
он распадается на указатель на указатель на char
. Таким образом, требуется двойной
в объявлении параметра.
Примечание: чтобы получить действительно правильный C++, вы должны заменить каждый
экземпляр char
с помощью const char
. Это связано с тем, что символ в
вопрос относится к строковым литералам, и вам не разрешено изменять
строковый литерал во время выполнения.
- Создание строк с символами UTF-8 из данных
- Проблема с очисткой строки, считанной из последовательного буфера
- Заполнение массива символов пробелами
- char * переменная - правильно обрабатывать, чтобы избежать переполнения
- Проблема с сохранением переменной «char» в EEPROM на ESP32.
- Указатель на массив символов
Вы пытаетесь передать массив char * функции, которая ожидает один char *., @Majenko
@Majenko AFAIK в любом случае вы передаете только указатель на первую ячейку массива, или я ошибаюсь?, @Guy . D