В настоящее время я работаю на платформе Arduino и пытаюсь избавиться от всех строк с помощью char [] и указателей, чтобы избежать проблем с памятью моего Arduino nano.Следующий код использовался для генерации строки и передачи функции, которая ожидает символ *:
char * ptr = "";
strcpy(ptr, "AT+CWJAP=\"");
strcat(ptr, wifi_ssid);
strcat(ptr,"\",\"");
strcat(ptr,WIFI_PASS);
strcat(ptr,"\"");
Serial.println(ptr);
addToPipe(ptr);
где:
void ESP8266::addToPipe(char * cmd) {
for(pipeSlot = 0; pipeSlot < PIPEMAXSIZE; pipeSlot++) {
if(isCharArrayEmpty(pipe[pipeSlot])){
Serial.print("Slot is Empty. New data:");
Serial.println(cmd);
pipe[pipeSlot] = cmd;
pipeSlot = PIPEMAXSIZE; //for breaking loop
} else {
Serial.print("Slot is Full with:");
Serial.println(pipe[pipeSlot]);
}
}
printPipe();
}
, но по какой-то неочевидной причине указательPTR печатался в последовательном порту непрерывно.Однако, изменив вышеупомянутое поколение строк следующим образом:
char * ptr = malloc(1);
strcpy(ptr, "AT+CWJAP=\"");
strcat(ptr, wifi_ssid);
strcat(ptr,"\",\"");
strcat(ptr,WIFI_PASS);
strcat(ptr,"\"");
Serial.println(ptr);
addToPipe(ptr);
, кажется, избавляет от проблемы.Вопрос в том, в чем разница:
1. char * ptr = "";
2. char * ptr = malloc(1);
3. char * ptr = NULL
Заранее спасибо