2012-01-31 20 views
0

我試圖將PIN(PIN中有數據)複製到溫度。 (假設PIN總是小於溫度)複製一個字符串時這個工作嗎?

const char * PIN; 
.... 
char [10] temp =""; 
int i = 0; 
while (*(PIN+i)) { 
    temp[i] = (PIN+i)*; 
    i++; 
} 

如果我像處理指針那樣處理溫度,它也可以嗎?

long int res = strtol (&temp, NULL, 10); 
+0

您需要取消引用指針PIN + 1,如下所示:「*(PIN + i)」或「PIN [i]」。僅使用C庫函數會更簡單:「strcpy(temp,PIN);」。 – 2012-01-31 04:35:20

回答

1

有幾件事情,

溫度=「\ 0」 請問字符串中居然放了兩個\ 0,由報價隱含的一個你寫的,和一個。

PIN +我需要解除引用(帶*),否則它將繼續運行,除非您可以保證在地址空間末尾有空指針。

while (*(PIN+i)) 

然後爲了複製字符而不是指針,賦值語句也應該被解除引用。

temp[i]=*(PIN+i); 
i++; // Because the pointer needs to be incremented 

此外,爲什麼你不會只使用strcpy?或strncpy?

+0

strcpy是一個較長的操作,我相信不是嗎? – Falcata 2012-01-31 04:39:50

+0

現在看起來好嗎?也謝謝! (* src) * dest = * src * srC++; – Falcata 2012-01-31 04:40:38

+0

很確定def是類似於 的東西,而(* src) * dest = * src * srC++; * dest ++; } 漂亮精益但不檢查NULL和源字符串的結尾。另外我不會擔心在編碼的這一點上操作的長度。留下優化,直到最後:) – RussS 2012-01-31 04:41:27

2

不!

PIN+i不會改變任何狀態。這是事實,而PINi不等於零。由於PIN是一個隨機存儲器地址,這是一個壞主意。

如果你想複製一個字符串,看看strcpy

+0

對不起,我忘了添加i ++!另外,我假設PIN以空字符'\ 0'結尾' – Falcata 2012-01-31 04:38:39

+0

@Falcata如果PIN以NUL字符結尾,只是'strcpy(temp,PIN);'。 – Borealid 2012-01-31 04:39:53

相關問題