Почему приведенный ниже код C, использующий strcpy
, прекрасно работает для меня?Я попытался заставить его выйти из строя двумя способами:
1) Я попытался strcpy
из строкового литерала в выделенную память, которая была слишком мала, чтобы содержать ее.Он скопировал все это и не пожаловался.
2) Я попытался strcpy
из массива, который не был NUL
-определен.strcpy
и printf
работали просто отлично.Я думал, что strcpy
скопировал char
с, пока не был найден NUL
, но ни один не присутствовал, и он все равно остановился.Мне просто везет, или я неправильно понимаю, как работает эта функция?Это специфично для моей платформы (OS X Lion), или большинство современных платформ работают таким образом?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char *src1 = "123456789";
char *dst1 = (char *)malloc( 5 );
char src2[5] = {'h','e','l','l','o'};
char *dst2 = (char *)malloc( 6 );
printf("src1: %s\n", src1);
strcpy(dst1, src1);
printf("dst1: %s\n", dst1);
strcpy(dst2, src2);
printf("src2: %s\n", src2);
dst2[5] = '\0';
printf("dst2: %s\n", dst2);
return 0;
}
Результат выполнения этого кода:
$ ./a.out
src1: 123456789
dst1: 123456789
src2: hello
dst2: hello