2011-09-06 66 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发布上述(我要键入类似的东西在这里,太)。