Добавить строку в строку в 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';
Другие вопросы по тегам