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