我想将文件名复制到字符串并将“.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);
答案 0 :(得分:8)
_s函数的size
参数是目标缓冲区的大小,而不是源的大小。该错误是因为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);
答案 1 :(得分:0)
为什么不
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';
答案 2 :(得分:0)
结帐asprintf
。它允许您打印到像printf
答案 3 :(得分:0)
size = strlen(locatie);
size++;
nieuw = (char*)malloc(size+4);
strcpy_s(nieuw, size, locatie);
nieuw[size] = '\0';
strcat_s(nieuw, size, ".cpt");
puts(nieuw)
答案 4 :(得分: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);
答案 5 :(得分:0)
#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;
}