Преобразование строки в массив символов

В моем проекте мне нужно преобразовать строку в массив символов. Из различных примеров я пришел к выводу, что функция toCharArray() преобразует строку в массив символов. Но мне не удалось этого сделать. Ошибка заключается в следующем:

'a' не называет тип

Код, который я использую, таков:

String a = "45317";
char b[6];
a.toCharArray(b,6);

Ресурсы являются https://www.arduino.cc/en/Reference/StringToCharArray и http://forum.arduino.cc/index.php?topic=199362.0

, 👍2

Обсуждение

возможно, этот пример может вам помочь: https://stackoverflow.com/questions/68497443/convert-an-arduino-c-string-to-an-ansi-c-string-char-array-using-the-string, @Pirx


2 ответа


Лучший ответ:

4

Если вы пытаетесь использовать метод а в глобальном масштабе, это обречено на провал. Вы можете вызывать методы только внутри функций.

Если все, что вам нужно, - это массив символов с "45317" в нем, просто используйте:

char *b = "45317";

Если вы хотите преобразовать строку, созданную во время выполнения, в массив символов, то ваш текущий метод верен - вам просто нужно сделать это в нужном месте.

,

4

Существует встроенное преобразование, которое вернет базовое содержимое строки в виде массива символов, заканчивающегося нулем:

 String foo = "Steve was here"
 char *text = foo.c_str();

Это, вероятно, все, что вам нужно, если только вы не хотите копировать в буфер. В этом случае вы можете использовать стандартную библиотеку C для этого:

 // Declare a buffer
 char buf[100];

 // Copy this string into it
 String foo = "This is my string"
 snprintf( buf, sizeof(buf)-1, "%s", foo.c_str() );

 // Ensure we're terminated
 buf[sizeof(buf)] = '\0';

(Вы можете предпочесть strcpy, memcpyи т. Д. snprintf.)

,

1) c_str () “не является заменой " toCharArray ()": ваш первый пример не удалось скомпилировать с "_error: недопустимое преобразование из" const char*’ в " char*"_”. Конечно, если вам нужен только const char *, то предпочтительнее использовать c_str ()'. 2) С точки зрения размера кода, snprintf () - очень неэффективный способ копирования строки. 3) Нет необходимости вычитать один из "sizeof(buf)` во втором аргументе в" snprintf ()"., @Edgar Bonet