问题
I want to copy the a file name to a string and append ".cpt" to it. But I am unable to do this with safe functions (strcat_s). Error: "String is not null terminated!". And I did set '\0', how to fix this using safe functions?
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);
回答1:
The size
parameter of the _s functions is the size of the destination buffer, not the source. The error is because there is no null terminator in nieuw
in the first for characters. Try this:
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);
回答2:
Maybe some standard solution?
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);
回答3:
Why not
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';
回答4:
Check out asprintf
. It allows you to print to a string like printf
回答5:
size = strlen(locatie);
size++;
nieuw = (char*)malloc(size+4);
strcpy_s(nieuw, size, locatie);
nieuw[size] = '\0';
strcat_s(nieuw, size, ".cpt");
puts(nieuw)
;
回答6:
#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;
}
来源:https://stackoverflow.com/questions/13092366/add-string-to-string-in-c-with-safe-functions