0
我想傳遞一個字符串到一個函數在c和由於某種原因,即使我沒有爲變量設置一個值,但它已經擁有其他變量的值,如果我改變它,這些更改似乎會覆蓋其他變量。下面是代碼:Arduino字符陣列映射重疊
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
參數r。下面是輸出,如果我進入face
我的字符串:
face
face
3e
2c
1c
0e
0e
1c
2c
3e
ecce
爲什麼它映射的字符串相同的內存插槽?
好吧,解釋讀取重疊,但r返回到主函數(和存儲),然後在str_reverse中使用一個參數,所以當我修改反向時它被修改? – cujo 2014-09-29 03:49:51
儘管讓全球化解決了我的問題,但非常感謝您的解決方案。 – cujo 2014-09-29 03:53:44
我們可以花時間爲什麼發生這樣的事情,但是當它是誤用/誤解語言的結果時,它確實不是非常有用。一旦從函數返回,您不能授予在函數中聲明的自動變量(即放置在其堆棧中)可能發生的情況。 – 2014-09-29 04:32:50