Я пытаюсь передать строку в функцию из c и по какой-то причине, хотя я не задал значение для переменной, но она уже обладает значением другой переменной и если я ее изменяю , изменения, похоже, переписывают другую переменную. Вот код:Arduino Char Array Mapping Overlap
void reverse(char *s, char *reverse)
{
uint32_t length = str_length(s);
Serial.println(reverse);
Serial.println(s);
for (uint32_t i = 0; i < length; i++)
{
Serial.print(length - i - 1);
Serial.println(s[length - i - 1]);
reverse[i] = s[length - i - 1];
}
for (uint32_t i = 0; i < length; i++)
{
Serial.print(i);
Serial.println(s[i]);
}
reverse[length] = '\0';
Serial.println(reverse);
}
char* readstring()
{
char s[128];
readline(s, 128);
return s;
}
char* str_reverse(char *r)
{
char rev[128];
reverse(r, rev);
return rev;
}
readstring()
вызывается ранее в коде и становится параметром г в str_reverse
. Вот результат, если я введу face
как моя строка:
face
face
3e
2c
1c
0e
0e
1c
2c
3e
ecce
Почему отображать строки в той же ячейке памяти?
Хорошо, что объясняет перекрытие чтения, но r возвращается к основной функции (и сохраняется), а затем используется параметр в str_reverse, поэтому почему он изменяется при изменении обратного? – cujo
Хотя решение s global решило мою проблему, так что спасибо за решение. – cujo
Мы можем потратить время на то, почему произошло что-то подобное, но на самом деле это не очень полезно, когда это связано с неправильным использованием/непониманием языка. После того, как вы вернетесь из функции, вы не можете получить доступ к автоматическим переменным, которые были объявлены в функции (т. Е. Помещены в стек). –