2

In my project I need to convert a string to a char array. From various examples I concluded that toCharArray() will convert a string to a char array. But I failed to do so. The error is:

'a' does not name a type

The code I am using is:

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

Resources are https://www.arduino.cc/en/Reference/StringToCharArray and http://forum.arduino.cc/index.php?topic=199362.0

4

If you're trying to use a method of a in the global scope, that's doomed to failure. You can only call methods within functions.

If all you want is a char array with "45317" in it then just use:

char *b = "45317";

If you want to convert a string that is built at runtime into a char array, then your current method is correct - you just have to do it in the right place.

2

There's a built in conversion which will return the underlying string-contents as a NULL terminated character array:

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

That is probably all you need, unless you do want to copy into a buffer. In that case you can use the standard C library to do that:

 // 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';

(You might prefer strcpy, memcpy, etc to snprintf.)

  • 1
    1) c_str() is no replacement for toCharArray(): your first example fails to compile with “error: invalid conversion from ‘const char*’ to ‘char*’”. Of course, if you only need a const char *, then c_str() is to be preferred. 2) In terms of code size, snprintf() is a very inefficient way of copying a string. 3) No need to subtract one from sizeof(buf) in the second argument to snprintf(). – Edgar Bonet Mar 20 '17 at 18:46

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.