7.21.2.4はstrncpy関数
コピーが重なるオブジェクト間で行われる場合、動作は未定義です。重複している何
?
宛先文字列の先頭がソース文字列の終わりを横切るときに重複していることは明らかです。
しかし、次の例では重複していますか?
const char* dateConst = "2017-01-25";
char* date = malloc(16);
strcpy(date, dateConst);
strncpy(date+4, date+5, 2);
strncpy(date+6, date+8, 3);
printf("%s\n", date);
出力:20170125
のstrncpyはちょうどそれがthis implementationであるようにcharでchar型のシンボルをcopyes場合、問題はないはずです。
C標準では 'strncpy'の動作を規定していますが、C++をコンパイルしているようです。 – StoryTeller
' strncpy'は危険な機能であり、避けるべきです。これは、nullで終了する文字列ではじめて使用することは意図されていませんでした。代わりに、 'memcpy'または' strcpy'を使用してください。 – Lundin