我对C编程有疑问。 我有一个循环,我在每次迭代中生成一个新的char。我想要附加到字符串的每个生成的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使用char *。所以我试图复制我要添加到新指针的char的内容。 我可能做错了......我不是很有经验。 谢谢
strtol的原因: 我有一个char * msg,它包含一个hexa数字。我想处理那个六进制数,但是当我尝试做例如移位(&lt;&lt; 16)时,移位16位(乘以2 ^ 16)六进制字符的十进制ascii值,而不是移动字符本身。 所以,我将六进制数转换为一个字符,这样当我尝试进行移位时,它会移动正确的值。我知道这很奇怪。 能不能帮我提出更好的事情?
unsigned char *octets0"3F214365876616AB15387D5D59";
crc ^= ((*octets++) << 16);
答案 0 :(得分:1)
有几个问题。
第一个问题是你创建了一个char
指针数组,而不是char
数组。你想要:
char string[20];
在C中,数组隐式地“降级”为指向其第一个元素的指针,因此如果仅传递string
,则为char*
(string == &string[0]
)
从那里开始......不知道pp
是什么,但strtol()
会返回long int
,而您正试图分配给char
- 这不会以你的思维方式工作。你的短7个字节。
(编辑以定义“工作”,如“不是你的想法”)
答案 1 :(得分:0)
尽量不要在char*
和char
之间施放 - 它没有做任何有用的事情,无论如何你的编译器不应该让你这样做。如果你真的想使用strcat
,那应该是
char cc; // no ="" here!
...
tt[0] = cc;
strcat(string, tt)
但是,只要做上面发布的cnicutar会更容易(我也会在这里打字)。