Добавить строку в строку в C с безопасными функциями
Я хочу скопировать имя файла в строку и добавить к нему ".cpt". Но я не могу сделать это с безопасными функциями (strcat_s). Ошибка: "Строка не завершена нулем!". И я установил '\0', как это исправить, используя безопасные функции?
size = strlen(locatie);
size++;
nieuw = (char*)malloc(size+4);
strcpy_s(nieuw, size, locatie);
nieuw[size] = '\0';
strcat_s(nieuw, 4, ".cpt"); // <-- crash
puts(nieuw);
6 ответов
Решение
size
Параметр функции _s - это размер буфера назначения, а не источника. Ошибка в том, что в NULL нет нулевого терминатора nieuw
во первых для персонажей. Попробуй это:
size = strlen(locatie);
size++;
int nieuwSize = size + 4;
nieuw = (char*)malloc(nieuwSize );
strcpy_s(nieuw, nieuwSize, locatie);
nieuw[size] = '\0';
strcat_s(nieuw, nieuwSize, ".cpt"); // <-- crash
puts(nieuw);
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char old[] = "hello";
size_t size = strlen(old) + 5;;
char *new_name = (char*)malloc(size);
new_name[size-1] = '\0';
strcpy_s(new_name, size, old);
strcat_s(new_name, size, ".cpp");
printf("%s\n", new_name);
return 0;
}
Может быть, какое-то стандартное решение?
const char * const SUFFIX = ".cpt";
size = strlen(locatie) + strlen(SUFFIX) + 1; // +1 for NULL
nieuw = (char*)malloc(size);
snprintf(nieuw, size, "%s%s", locatie, SUFFIX);
size = strlen(locatie);
size++;
nieuw = (char*)malloc(size+4);
strcpy_s(nieuw, size, locatie);
nieuw[size] = '\0';
strcat_s(nieuw, size, ".cpt");
puts(nieuw)
;
Проверять, выписываться asprintf
, Это позволяет вам печатать в строку, такую как printf
Почему бы и нет
size = strlen(locatie);
size++;
nieuw = (char*)malloc(size+6);
strcpy_s(nieuw, size, locatie);
strcat_s(nieuw, 4, ".cpt");
puts(nieuw);
nieuw[size + 5] = '\0';