Объединить с Memcpy - PullRequest
       56

Объединить с Memcpy

0 голосов
/ 02 августа 2011

Я пытаюсь объединить две строки и не могу использовать strcpy и strcat, поэтому я пытаюсь сделать это с помощью memcopy.Однако в третьем утверждении memcpy он не добавляет к продолжению первого memcpy.есть идеи как это сделать?

memset(&l->db.param_key.param_name, ' ', sizeof(l->db.param_key.param_name));
memcpy(l->db.param_key.param_name,g->program_id_DB,(strlen(g->program_id_DB)));
memcpy(l->db.param_key.param_name[strlen(g->program_id_DB)+1],l->userId_const,sizeof(l->userId_const));

Ответы [ 4 ]

1 голос
/ 02 августа 2011

Адрес в третьем вызове должен быть:

l->db.param_key.param_name + strlen(g->program_id_DB) + 1

Обратите внимание, что для T * p выражение p[i]; идентично *(p + i). Вы не хотите разыменования, вам нужен адрес, поэтому вы просто добавляете к указателю.

(также верно, что p + i идентичен &p[i], пока i является действительным индексом.)

Также обратите внимание, что никто не заметил, что ваша первая строка неверна, и вы должны просто сказать l->db.param_key.param_name (или эквивалентно &l->db.param_key.param_name[0]).

0 голосов
/ 02 августа 2011

ваш пример кода немного ужасен, но

memset(l->db.param_key.param_name,0,sizeof(l->db.param_key.param_name));
memcpy(l->db.param_key.param_name,g->program_id_DB,strlen(g->program_id_DB));
memcpy(&l->db.param_key.param_name[strlen(g->program_id_DB)],l->userId_const,sizeof(l->userId_const));

должен работать, , если l-> db.param_key.param_name и l-> userId_const являются массивами символов.

0 голосов
/ 02 августа 2011

Используйте memcpy() точно так же, как strcpy(), за исключением того, что вы должны работать с размером строки вместо длины строки.

0 голосов
/ 02 августа 2011

Вы даете второму memcpy значение элемента последнего массива. Правильный способ - дать адрес (с помощью оператора амперсанда (как это неявно подразумевалось во втором операторе).

memcpy(&l->db.param_key.param_name[strlen(g->program_id_DB)+1],l->userId_const,sizeof(l->userId_const))
...