2011-09-06 78 views
-1

我對C編程有疑問。 我有一個循環,我在每次迭代生成一個新的字符。每個生成的炭我要附加到一個字符串(字符*) 這是我的代碼:複製char到char *

char *string[20]; 
string[0]=0; 

for (p = 0; p < length(message) - 1; p = p + 2) 
{ 
... 
char cc=""; 
cc = (char) strtol(pp, pp, 16); 
char *tt[2]; 
tt[0]=""; 
*tt=(char *)cc; 
strcat(string,cc); 
} 

我知道,strcat的使用字符*。所以我試圖複製我想追加到一個新的指針字符的內容。 我可能做錯了......我不是很有經驗。 謝謝

strtol的原因: 我有一個char *味精,它包含一個hexa數字。我想處理這個hexa數字,但是當我嘗試做例如移位時(< < 16)將移位16位(乘以2^16)十六進制字符的十進制ASCII值,而不是移動字符本身。 因此,我將hexa編號轉換爲一個字符,這樣當我嘗試移動它時,它將移動正確的值。我知道它很奇怪。 Cann你能幫我拿出更好的?

unsigned char *octets0"3F214365876616AB15387D5D59"; 
crc ^= ((*octets++) << 16); 
+0

'char *'不是一個字符串。它是一個指向字符串的指針。 **指針和數組是不一樣的**(請閱讀[c-faq](http://c-faq.com/)的第6部分)。一個字符串是一個有一定長度的char數組。 – pmg

回答

1

幾個問題。

第一個問題是您已經創建了一個char指針數組,而不是char數組。你想:

char string[20]; 

在C中,數組隱含「降級」爲指針,它的第一個元素,所以如果你只是通過它string是一個char*string == &string[0]

從那裏...不知道什麼pp是,但strtol()返回long int你試圖分配給char - 這不會按照你的想法工作。你只有7個字節。

(編輯定義「工作」,如「不是你想的」)

+0

對'char'分配'long int'應該可行,是的。整型之間的簡單轉換。你的編譯器可能會(正確地)警告你可能會「失去精度」或他們使用的任何單詞,並且調用應該是'strtol(pp,&pp,16)',並且可能並不是等等。 –

+0

好的,那麼「那不會按照你認爲的那樣工作」? :) –

+0

我有一個char *味精,它包含一個hexa數字。 我想處理這個六進制數,但是當我嘗試進行十進制移位(<< 16)時,將16位(乘以2^16)十六進制字符的十進制ASCII值而不是移動字符本身 – DDC

0

儘量不要char*char之間投 - 它不會做任何有用的東西和你的編譯器不應該讓你這樣做,反正。如果你真的想用strcat,這應該是

char cc; // no ="" here! 
... 
tt[0] = cc; 
strcat(string, tt) 

但它會更容易只是做cnicutar發佈上述(我要鍵入類似的東西在這裏,太)。