I'm trying to make a program that will assemble words letter by letter but no matter what I try I cannot seem to get a char character to add to a char * array.
char * word[15];
char let = 'a';
void setup() {
Serial.begin(115200);
}
void loop() {
Serial.println("Saving letter.");
strcpy(word, let);
Serial.print("Current word: ");
Serial.println(word);
delay(100);
}
I've tried so many different ways of doing this seemingly simple thing and nothing has worked, can someone please tell me what I'm doing wrong?
What could you add to an array of pointers to nowhere?
Apart from any other problems word is a reserved word much as int and byte are
invisabuble:
strcpy(word, let);
strcpy copies a string to another string - let is not a string.
Did you intend to declare an array of pointers ?
invisabuble:
char * word[15];
To declare a character data array and fill it with zeros, use
char word[15] = {0};
To store the character 'a' in the first position of that array, use
word[0] = 'a';
I am going to repeat some others but here are the issues I see:
The following declares an array of pointers to char:
char * word[15];
What you probably want is an array of characters (character string) and I would recommend initializing it:
char word[15] = "";
let is a single character so you cannot use strcpy() . If you want to use strcpy() or strcat() make let a string like below:
char let[] = "a";
You can add letters using strcat() as long as the letters are a string. Make sure you don't write past the end of the word string!!!
1 Like
ToddL1962:
char word[15] = "";
Does not compile for the reason previously pointed out
I don't believe word is a reserved word.
It's a Microsoft abomination.
Try compiling this
char word[15] = "";
void setup()
{
Serial.begin(115200);
}
void loop()
{
}
Arduino: 1.8.19 (Windows 10), Board: "Arduino Nano, ATmega328P"
C:\Users\Bob2\Desktop\Arduino 1.8.19\arduino-builder -dump-prefs -logger=machine -hardware C:\Users\Bob2\Desktop\Arduino 1.8.19\hardware -hardware C:\Users\Bob2\AppData\Local\Arduino15\packages -tools C:\Users\Bob2\Desktop\Arduino 1.8.19\tools-builder -tools C:\Users\Bob2\Desktop\Arduino 1.8.19\hardware\tools\avr -tools C:\Users\Bob2\AppData\Local\Arduino15\packages -built-in-libraries C:\Users\Bob2\Desktop\Arduino 1.8.19\libraries -libraries C:\Users\Bob2\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -vid-pid=1A86_7523 -ide-version=10819 -build-path C:\Users\Bob2\AppData\Local\Temp\arduino_build_409032 -warnings=all -build-cache C:\Users\Bob2\AppData\Local\Temp\arduino_cache_985161 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.arduinoOTA.path=C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -verbose C:\Users\Bob2\AppData\Local\Temp\arduino_modified_sketch_644843\sketch_dec19c.ino
C:\Users\Bob2\Desktop\Arduino 1.8.19\arduino-builder -compile -logger=machine -hardware C:\Users\Bob2\Desktop\Arduino 1.8.19\hardware -hardware C:\Users\Bob2\AppData\Local\Arduino15\packages -tools C:\Users\Bob2\Desktop\Arduino 1.8.19\tools-builder -tools C:\Users\Bob2\Desktop\Arduino 1.8.19\hardware\tools\avr -tools C:\Users\Bob2\AppData\Local\Arduino15\packages -built-in-libraries C:\Users\Bob2\Desktop\Arduino 1.8.19\libraries -libraries C:\Users\Bob2\Documents\Arduino\libraries -fqbn=arduino:avr:nano:cpu=atmega328 -vid-pid=1A86_7523 -ide-version=10819 -build-path C:\Users\Bob2\AppData\Local\Temp\arduino_build_409032 -warnings=all -build-cache C:\Users\Bob2\AppData\Local\Temp\arduino_cache_985161 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino7.path=C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\tools\avr-gcc\7.3.0-atmel3.6.1-arduino7 -prefs=runtime.tools.avrdude.path=C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino17 -prefs=runtime.tools.arduinoOTA.path=C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\tools\arduinoOTA\1.3.0 -verbose C:\Users\Bob2\AppData\Local\Temp\arduino_modified_sketch_644843\sketch_dec19c.ino
Using board 'nano' from platform in folder: C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6
Using core 'arduino' from platform in folder: C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6
Detecting libraries used...
"C:\\Users\\Bob2\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\Bob2\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\Bob2\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "C:\\Users\\Bob2\\AppData\\Local\\Temp\\arduino_build_409032\\sketch\\sketch_dec19c.ino.cpp" -o nul
Generating function prototypes...
"C:\\Users\\Bob2\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\Bob2\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\Bob2\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "C:\\Users\\Bob2\\AppData\\Local\\Temp\\arduino_build_409032\\sketch\\sketch_dec19c.ino.cpp" -o "C:\\Users\\Bob2\\AppData\\Local\\Temp\\arduino_build_409032\\preproc\\ctags_target_for_gcc_minus_e.cpp"
"C:\\Users\\Bob2\\Desktop\\Arduino 1.8.19\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\Bob2\\AppData\\Local\\Temp\\arduino_build_409032\\preproc\\ctags_target_for_gcc_minus_e.cpp"
Compiling sketch...
"C:\\Users\\Bob2\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10819 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\Bob2\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\Bob2\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\eightanaloginputs" "C:\\Users\\Bob2\\AppData\\Local\\Temp\\arduino_build_409032\\sketch\\sketch_dec19c.ino.cpp" -o "C:\\Users\\Bob2\\AppData\\Local\\Temp\\arduino_build_409032\\sketch\\sketch_dec19c.ino.cpp.o"
sketch_dec19c:1:13: error: 'char word [15]' redeclared as different kind of symbol
char word[15] = "";
^
In file included from C:\Users\Bob2\AppData\Local\Temp\arduino_build_409032\sketch\sketch_dec19c.ino.cpp:1:0:
C:\Users\Bob2\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6\cores\arduino/Arduino.h:122:22: note: previous declaration 'typedef unsigned int word'
typedef unsigned int word;
^~~~
exit status 1
'char word [15]' redeclared as different kind of symbol
Please see my earlier reply 8
(And neither is byte)
OK. It is a typedef, but you still can't use it as a variable name
You can, if you don't #include (to en-verb a term) the typedef
int main ()
{
char word[80] = "word";
return 0;
}
So, replace the Arduino main() function with one of your own and basically stop the Arduino from doing anything
Is that the answer ?
int main ()
{
char word[80] = "word";
PORTB = (unsigned char) word [0];
return 0;
}
(I don't actually recommended you do this, but hopefully, you get my drift)
This works for me, except for the expected warning.
void setup() {
char word[15]={0};
}
void loop() {}
C:\Users\Jim\Desktop\Arduino\sketch_dec19b\sketch_dec19b.ino:3:6: warning: unused variable 'word' [-Wunused-variable]
3 | char word[15]={0};
|
void setup() {
char word[15]="word";
Serial.begin (115200);
Serial.println(word);
}
void loop() {}
Fascinating. And not a little bizarre.
"word" is not listed as a keyword in this language reference:
https://en.cppreference.com/w/cpp/keyword
Is it not just a case of scope ?
C++ does not prevent you redefining a variable in a different scope
Consider
char wibble[15] = "wibble1";
void setup()
{
Serial.begin (115200);
char wibble[15] = "wibble2";
Serial.println(wibble);
}
void loop() {}