Ошибка с конкатенацией символов strcat
Все еще не понимаю, что такое конкатенация символов.
void setup() {
testCounter(3);
}
void loop() {
// put your main code here, to run repeatedly:
}
char testCounter(int countx){
char a[10];
strcpy(a, "COUNTER: ");
strcat(a, printDigits(countx));
return a;
}
char printDigits(int digits){
char a[3];
if(digits < 10) {
strcpy(a, "0");
sprintf(a,"%d",digits);
} else {
sprintf(a,"%d",digits);
}
return a;
}
Ошибка: недопустимое преобразование из 'char' в 'const char' [-fpermissive]* в строке testCounter
:
strcat(a, printDigits(countx));
Не понимаю эту часть ошибки.
ФункцияprintDigits
возвращает символ, так что... strcat
должен работать. Но почему все-таки ошибка?
Пожалуйста, помогите...
@wieb, 👍0
1 ответ
char printDigits(int digits){
Вы сообщаете компилятору, что вернете один символ.
char a[3];
a
— три символа. Таким образом, объявление не соответствует.
Вы можете изменить объявление на:
char * printDigits(int digits){
Но даже это было бы плохо, потому что a
выйдет из области видимости после возврата функции.
char a[3];
Это слишком мало для ввода целого числа. Целое число может состоять из 5 символов, плюс, возможно, знак минус, и в конце вам нужен нулевой знак. Семь байтов было бы безопаснее.
Самый простой способ сделать то, что вы хотите:
void setup() {
Serial.begin (115200);
testCounter(3);
}
void loop() {
}
char testCounter(int countx){
char a[15];
sprintf (a, "COUNTER: %02d", countx);
Serial.println (a);
}
Также здесь:
< pre class="lang-c++ Prettyprint-override"> if(digits < 10) {
strcpy(а, "0");
sprintf(a,"%d",цифры);
} еще {
Это не сработает, потому что вы помещаете «0» в a
, а затем перезаписываете его с помощью sprintf
.
Функция
printDigits
возвращаетchar
, так что...strcat
должен работать. Но почему все-таки ошибка?
Посмотрите на прототип strcat
:
http://www.cplusplus.com/reference/cstring/strcat/
Он ожидает char *
, а не char
. Это разные вещи. Один из них является указателем, другой – нет.
- C++ против языка Arduino?
- avrdude ser_open() can't set com-state
- Как читать и записывать EEPROM в ESP8266
- Float печатается только 2 десятичных знака после запятой
- устаревшее преобразование из строковой константы в 'char*'
- Запрограммировать ATMega328P и использовать его без платы Arduino.
- Разница между print() и println()
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]