C char конкатенация массива

Что у меня:

char cmd[50] = "some text here";
char v[] = {'a','s','d','c','b'};

Итак, я хочу объединить cmd, добавив письмо из v.

Очевидно:

strcat(cmd, v[3]);

не работает, потому что strcat не принимает параметр v[n] n = int.

Ответ 1

Проблемы с вашим подходом.

  • Строки C должны заканчиваться на 0 байт, другими словами символ '\0'. Использование "" добавляет это автоматически, но в противном случае вы должны добавить его самостоятельно, и все строковые функции зависят от того, что там 0.

  • Ваш массив v содержит символы, а не строки, а strcat принимает строки.

Одно решение:

char cmd[50] = "some text here";
char *v[] = {"a","s","d","c","b"};
strcat(cmd,v[3]);

Это превращает ваш массив char в массив указателей на строки C.

Кроме того, это ваша обязанность позаботиться о том, чтобы cmd[] содержало достаточно места для хранения того, что вы добавляете к нему с помощью strcat (вот оно). Обычно лучше использовать snprintf для выполнения конкатенации строк, так как он принимает общий размер целевого массива, включая завершение нулевого значения, и добавляет, что этот нуль всегда, поэтому его сложнее испортить. Пример с исходным массивом char:

char cmd[50] = "some text here";
char buf[50];
char v[] = {'a','s','d','c','b'};
snprintf(buf, sizeof buf, "%s%c", cmd, v[3]);

Примечания: sizeof как это работает только тогда, когда buf действительно представляет собой массив, объявленный с помощью [], как здесь. Кроме того, с snprintf, использование того же буфера, что и аргумент назначения и формата, может привести к неожиданным результатам, поэтому я добавил новую переменную буфера назначения.

Еще один пример snprintf, только с вашими оригинальными двумя массивами, добавив к концу текущего содержимого cmd:

snprintf(cmd + strlen(cmd), (sizeof cmd) - strlen(cmd), "%c", v[3]);

Так ясно, что в этом конкретном случае strncat(cmd, &v[3], 1), предложенный в других ответах на добавление 1 символа, намного приятнее, но преимущество snprintf заключается в том, что вы можете добавить все типы данных, поддерживаемые printf, а не символы.

Ответ 2

Хм. Насколько я понимаю, вы хотите добавить один char из второго массива? поэтому вы должны использовать

  strncat (cmd, &v[3], 1);

: -)

Ответ 3

Используйте не:

strcat(cmd,&v[3]);

&v[3] не является указателем на строку с нулевым завершением! вместо этого используйте

strncat(cmd, &v[3], 1);

Ответ 4

Сначала убедитесь, что переменная 'cmd' имеет достаточно выделенной памяти.

Во-вторых, упоминание "v [3]" - это значение, которое является подписанным байтом. Вы должны использовать следующий вызов strncat (не strcat):

strncat(cmd,&v[3],1);

Ответ 5

как насчет

strcat(cmd,&v[3]);

Ответ 6

проблема заключается в том, что вы также не используете strcat:

char *strcat (char *dest, const char *src);

потому что вы делаете

char *strcat (char *dest, char src);

Итак, вы должны объявить char * как ваш char.

Ответ 7

char buf[2];

sprintf(buf,"%c", V[3]);
strcat(cmd, buf);

или

strncat (cmd, &v[3],1);

вы не можете сделать это с помощью

strcat(cmd,&v[3]);

это скопирует массив V из ячейки 3 в конец массива и не будет копировать только V [3]

Я могу предложить другое решение

int len = strlen(cmd);
cmd[len]=v[3];
cmd[len+1] = '\0';