Скопировать Char на char * - PullRequest
       20

Скопировать Char на char *

0 голосов
/ 06 сентября 2011

У меня вопрос к Си-программированию. У меня есть цикл, где я генерирую на каждой итерации новый символ. Каждый сгенерированный символ, который я хочу добавить в строку (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: У меня есть символ * msg, который содержит шестнадцатеричное число. Я хочу обработать это шестнадцатеричное число, но когда я пытаюсь сделать, например, сдвиг (<< 16), это сдвигает 16 бит (умножает на 2 ^ 16) десятичное значение ascii шестнадцатеричного символа вместо сдвига самого символа. Итак, я преобразовал число гекса в символ, так что когда я пытаюсь сделать смещение, оно сместит правильное значение. Я знаю это странно. Можете ли вы помочь мне придумать что-то лучше? </p>

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

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

Несколько проблем.

Первая проблема заключается в том, что вы создали массив char указателей, а не char.Вы хотите:

char string[20];

В C массив неявно «разлагается» на указатель на свой первый элемент, поэтому, если вы передадите просто string, это будет char* (string == &string[0])

Оттуда ... не знаю, что такое pp, но strtol() возвращает long int, который вы пытаетесь присвоить char - это не сработает так, как вы думаете.У вас около 7 байтов.

(отредактировано для определения «работы» как «Не то, что вы думаете»)

0 голосов
/ 06 сентября 2011

Старайтесь не приводить между char* и char - это не делает ничего полезного, и ваш компилятор в любом случае не должен позволять вам это делать. Если вы действительно хотите использовать strcat, это должно быть

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

Но было бы намного проще просто сделать то, что написал cnicutar выше (я тоже собирался напечатать здесь что-то подобное).

...