【问题标题】:Copy Char to char*将字符复制到字符*
【发布时间】:2011-09-06 07:34:37
【问题描述】:

我有一个关于 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 使用 char*。所以我试图复制我想附加到新指针的字符的内容。 我可能做错了什么......我不是很有经验。 谢谢

strtol 的原因: 我有一个 char* msg,它包含一个十六进制数。我想处理该十六进制数,但是当我尝试执行例如移位 (

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

【问题讨论】:

  • A char* 不是字符串。它是一个指向字符串的指针。 指针和数组不一样(阅读the c-faq 的第6 节)。字符串是具有一定长度的 char 数组。

标签: c string pointers copy char


【解决方案1】:

几个问题。

第一个问题是您创建了一个char 指针数组,而不是char 数组。你想要:

char string[20];

在 C 中,数组隐式“降级”为指向其第一个元素的指针,因此如果您只传递 string,它就是 char*string == &amp;string[0]

从那里......不知道pp 是什么,但strtol() 返回一个long int,你试图将它分配给char——这不会像你想象的那样工作。你少了大约 7 个字节。

(编辑以将“工作”定义为“不是你想的那样”)

【讨论】:

  • long int 分配给char 应该可以,是的。整数类型之间的简单转换。您的编译器可能(正确地)警告您可能“丢失精度”或他们使用的任何词,并且调用应该是 strtol(pp, &amp;pp, 16) 并且可能不是预期的等等。
  • 好的,“这不会像你想象的那样工作”怎么样? :)
  • 我有一个 char* msg,它包含一个十六进制数。我想处理该十六进制数,但是当我尝试进行实例移位(
  • @Brian:很多事情似乎并没有按照他的预期进行,但我不知道这个单独的任务是否在其中。 :-) 如果我不得不猜测,我会说strtol 调用旨在将两个十六进制字符转换为字符的数字表示,就像在解码48656c6c6f20576f726c6421 时一样——它不会那样做,因为@987654336 @ 不想被告知在其他问题中停止在哪里,但是附加到字符串和 p = p+2 部分看起来很像它。显然,这只是猜测。
  • @DDC:您可以打开一个新问题或编辑已发布的问题以说出您真正想要实现的目标。如果可能,使用预期的输入/输出对。
【解决方案2】:

尽量不要在char*char 之间进行转换——它不会做任何有用的事情,而且你的编译器也不应该让你这样做。如果你真的要使用strcat,那应该是

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

但是按照 cnicutar 上面发布的内容来做会容易得多(我也打算在这里输入类似的内容)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 1970-01-01
    • 2019-12-08
    • 2020-08-02
    相关资源
    最近更新 更多