Конкатенация массива символов C
что у меня есть:
char cmd[50] = "some text here";
char v[] = {'a','s','d','c','b'};
поэтому я хочу объединить cmd
добавив письмо от v
.
очевидно:
strcat(cmd, v[3]);
не работает, потому что strcat
не принимает v[n]
параметр n = int
.
7 ответов
проблемы с вашим подходом.
строки C должны заканчиваться на 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
для конкатенации строк, так как требуется общий размер целевого массива в том числе завершение null и добавляет, что null всегда есть, поэтому сложнее испортить. Пример с вашим оригинальным 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, а не символы.
Мда. Насколько я понимаю, вы хотите добавить один символ из второго массива? поэтому вы должны использовать
strncat (cmd, &v[3], 1);
: -)
Do не используйте этот:
strcat(cmd,&v[3]);
&v[3]
не является указателем на строку с нулевым завершением! вместо этого используйте
strncat(cmd, &v[3], 1);
во-первых, убедитесь, что переменная " cmd " имеет достаточно выделенной памяти.
во-вторых, упоминание 'v[3]' является значением, которое является подписанным байтом. Вы должны использовать следующий вызов strncat (не strcat):
strncat(cmd,&v[3],1);
проблема в том, что вы также не используете strcat:
char *strcat (char *dest, const char *src);
потому что ты
char *strcat (char *dest, char src);
поэтому вы должны объявить char * как ваш char.
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] = '';