以下の C コードを使用してうまく動作するのはなぜstrcpy
ですか? 私はそれを2つの方法で失敗させようとしました:
1)strcpy
文字列リテラルから、小さすぎてそれを含めることができない割り当てられたメモリに入れようとしました。それはすべてをコピーし、文句を言いませんでした。
strcpy
2) 終了していない配列から試しましたNUL
。strcpy
と はうまくprintf
いきました。a が見つかるまで sを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