以下の C コードを使用してうまく動作するのはなぜstrcpyですか? 私はそれを2つの方法で失敗させようとしました:
1)strcpy文字列リテラルから、小さすぎてそれを含めることができない割り当てられたメモリに入れようとしました。それはすべてをコピーし、文句を言いませんでした。
strcpy2) 終了していない配列から試しましたNUL。strcpyと はうまくprintfいきました。a が見つかるまで sをstrcpyコピーしたと思っていましたが、何も存在せず、停止しました。charNUL
これらが失敗しないのはなぜですか?何らかの形で「運が良かった」だけですか、それともこの機能の仕組みを誤解していますか? 私のプラットフォーム (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