Добавление места в strcat

У меня есть две строки char str1[41] е char str2[41], Если я использую strcat Функция для их объединения Я получаю уникальную строку без пробела, вместо этого между ними будет пробел.

это может быть способ:

strcat(strcat(str1, " "),str2)

Существует ли другой путь?

6 ответов

sprintf(destination, "%s %s", str1, str2);

Вы должны будете предоставить пункт назначения. Вы могли бы использовать str1 как пункт назначения, и он может работать правильно, но обратите внимание на то, как вы в настоящее время делаете вещи, которые могут привести к переполнению str1с буфером.

asprintf() выделит для вас буфер правильной (читай: безопасной) длины, но вы должны помнить free() тот буфер, когда вы закончите с ним.

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

size_t length = strlen(str1);
str1[length] = ' '; // overwrite null termination
str1[length+1] = '\0'; // add a new null termination
strcat(str1, str2);

И, конечно же, следует помнить о переполнении буфера.

Размещение фигурных скобок вокруг пространства решает проблему:strcat(str, {' '})

Для поддержания эффективности и соблюдения ограниченного размера массива str1,

size_t Len1 = strlen(str1);
size_t Len2 = strlen(str2);
if ((Len1 + 1 + Len2) >= sizeof(str1)) {
  ; // handle error
}
str1[Len1] = ' ';
memcpy(&Str1[Len1+1], str2, Len2 + 1);

ИЛИ ЖЕ

как определено в C11 K.3.7.1.3., если доступно, использовать strcpy_s()

size_t Len = strlen(str1);
strcpy_s(&str1[Len], Len - sizeof(str1), " ") || strcpy_s(&str1[Len+1], Len - (sizeof(str1) + 1), str2);

Предпосылка: strcat() не требуется.

Добавьте пробел в конце str1 перед объединением с str2 или добавьте пробел в начале str2 и затем объедините две строки...

Вы можете попробовать это. Я надеюсь, что это поможет вам.

strcat(string1, " ");
strcat(string1, string2);
Другие вопросы по тегам