为什么下面的 C 代码使用strcpy
对我来说很好?我试图通过两种方式使其失败:
1)我尝试strcpy
从字符串文字到分配的内存太小而无法包含它。它复制了整个事情并且没有抱怨。
2)我尝试strcpy
了一个未NUL
终止的数组。和工作strcpy
得printf
很好。我一直认为strcpy
复制char
s 直到NUL
找到 a ,但没有存在并且它仍然停止。
为什么这些不失败?我只是以某种方式变得“幸运”,还是我误解了这个功能的工作原理?它是特定于我的平台(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