4

ファイル名を文字列にコピーし、「.cpt」を追加したいと考えています。しかし、安全な関数 (strcat_s) ではこれを行うことができません。エラー: 「文字列は null で終了していません!」. '\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);
4

6 に答える 6

11

_s 関数のsizeパラメーターは、ソースではなく、宛先バッファーのサイズです。nieuwエラーは、最初の for 文字にnull ターミネータがないためです。これを試して:

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);
于 2012-10-26T18:29:39.657 に答える
1

多分いくつかの標準的な解決策?

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);
于 2012-10-26T18:47:27.600 に答える
1
#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;
}
于 2012-10-26T18:48:04.660 に答える
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';
于 2012-10-26T18:27:09.953 に答える
0

チェックアウトasprintf。printfのような文字列に印刷できます

于 2012-10-26T18:27:53.577 に答える
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)

;

于 2012-10-26T18:33:58.623 に答える