[問題] 指標 傳值?傳址?

看板C_and_CPP (C/C++)作者 (Never Stop)時間12年前 (2013/09/24 23:19), 編輯推噓1(1010)
留言11則, 4人參與, 最新討論串1/2 (看更多)
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) KeilC 8051 問題(Question): 有一筆資料,是由IC傳給我的,型態為 unsigned char *Data 當收到資料的時候,會觸發ReceiveTask()這段程式. unsigned char ReceiveBuffer[8]; void ReceiveTask(unsigned char XDATA *Data) { Analyze(*Data); } void Analyze(unsigned char *Data) { for(int i=0;i<8;i++,Data++) { ReceiveBuffer[i]=*Data; } //在這段程式裡面 ReceiveBuffer[]的資料,都是正確的   //也就是我真正收到的資料. } 但是,當我在別的地方,再次呼叫ReceiveBuffer[]的時候, 會發現ReceiveBuffer[]的數值改變了. ( ReceiveTask()並沒有被觸發 ) 請問是否是因為*Data 該位址的數值被改變了呢? 請教是否有辦法,讓ReceiveBuffer的值在執行Analyze()之後就不會被改變呢? 實際應用是這樣的,我從網路TCP端收到資料, 利用ReceiveTask()這個API將數值取出來。 分析之後,我將ReceiveBuffer[]的數值放到另外一個陣列, 然後透過TCP回傳給Client 至於存取方式,IC廠商提供的API就是unsigned char *Data 所以我想應該沒辦法改變用指標存取的事實? 想請教是否有辦法把指標裡面的"數值" 真正的放到變數裡面,而不是放位址. 謝謝大家~請多多指教 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.117.160.28

09/24 23:20, , 1F
之前有用過類似的方式傳陣列,但都沒發生這樣的問題.
09/24 23:20, 1F

09/24 23:20, , 2F
這次是遇到剛好*Data並不受我控制 >"<
09/24 23:20, 2F

09/24 23:35, , 3F
除非有特別說明不然你應該假設指標離開函數就無效了
09/24 23:35, 3F

09/24 23:35, , 4F
用memcpy之類的把資料抄出來吧
09/24 23:35, 4F

09/24 23:39, , 5F
謝謝樓上的建議!我會試試看
09/24 23:39, 5F

09/25 02:20, , 6F
Analyze(*Data); 不是應該為 Analyze(Data); ??
09/25 02:20, 6F

09/25 02:22, , 7F
也有可能是我搞錯 因為如果不對 應會有型別不符的警告
09/25 02:22, 7F

09/28 13:25, , 8F
樓上說的沒錯,照理說應該會有問題吧?!
09/28 13:25, 8F

09/28 13:26, , 9F
unsigned char *Data,是要你傳記憶體位置
09/28 13:26, 9F

09/28 13:26, , 10F
Analyze(*Data);你這裡卻是把值傳進去,這裡就不對啦
09/28 13:26, 10F

09/30 16:14, , 11F
誤會大了,我這段打上來示意的手誤了,的確如大家所說的多了*
09/30 16:14, 11F
文章代碼(AID): #1IGQsTKL (C_and_CPP)
文章代碼(AID): #1IGQsTKL (C_and_CPP)