Добавление места в 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);