Выдвижение аргумента
Я не могу понять, почему test
не передается должным образом в test1
#include <Arduino.h>
char *test1;
char *status_reply(char *test) {
int ans_rel = 1;
int ans_led = 0;
int ans_sw = 1;
sprintf(test,"%d%d%d",ans_rel,ans_sw,ans_led);
Serial.println(test);
}
void setup() {
Serial.begin(9600);
status_reply(test1);
Serial.println(test1);
}
void loop() {
// put your main code here, to run repeatedly:
}
@Guy . D, 👍-1
Обсуждение1 ответ
Лучший ответ:
Это не про Arduino. Это про C. Теперь у вас есть только указатель на char. Вам нужно выделить память для c-строки.
символ test1[128];
Если вы передадите указатель в sprintf, функция запишет в память, куда указывает указатель. Что-то где-то в памяти будет перезаписано, и последующий print выведет строку, но позже память будет использована для чего-то другого, и ваша c-строка исчезнет.
Спасибо. Я что-то упускаю: 1) В любом другом случае, если бы я инициализировал char *test1="hello world"
в начале и вывел Serial.println(test1)
- я бы получил правильное значение. 2) В коде здесь - когда я создаю test
внутри, он печатает его, как и ожидалось, но не передает его значение в test2
?, @Guy . D
char *test1="hello world"
будет указателем на глобальную выделенную константную c-строку и должна быть const char *test1="hello world"
. Я улучшил ответ., @Juraj
- Как разделить входящую строку?
- Как вывести несколько переменных в строке?
- форматирование строк в Arduino для вывода
- Очень простая операция Arduino Uno Serial.readString()
- DateTime в строку
- Как преобразовать строку в массив байтов
- Как отправить строку на мастер с помощью i2c
- Создание форматированной строки (включая числа с плавающей запятой) в Arduino-совместимом C++
Комментируя ответ на ваш предыдущий вопрос, я посоветовал вам прочитать раздел [Массивы и указатели](http://c-faq.com/aryptr/) FAQ по C. Судя по этим новым вопросам, похоже, вы этого не сделали. _Пожалуйста, прочтите его!_ Иначе вы потратите много времени, задавая здесь связанные (и не по теме) вопросы., @Edgar Bonet
@EdgarBonet ну я это читал. Должен сказать, что основная цель или мотивация объявления char как char* - совершенно неясна, @Guy . D
Чтобы было ясно - я понимаю технические детали таких определений, но не когда или почему использовать каждое из них. Это совсем не похоже на Python, @Guy . D