thisを見ると、 insert2 にint"H"
型 (C では定数)を格納しようとしていることがわかります。言い換えれば、(私のコンパイラで) 型を char ( ) に格納しようとしています。そこから、この動作を許可するか、エラーをスローするかは、コンパイラ次第です。Plusは ROM にのみ配置されている不変の文字列であるため、文字列を直接変更することはできません。int
sizeof("H") == 2
sizeof(char) == 1
"Hello world"
実証するために、私は実行しました:
printf("val:%d\n", "H");
printf("val:%d\n", "He");
printf("val:%d\n", "He");\\note 2nd instance the same
printf("val:%d\n", "Hel");
printf("val:%d\n", "Hell");
printf("val:%d\n", "Hello");
printf("val:%d\n", "Hello ");
printf("val:%d\n", "Hello W");
printf("val:%d\n", "Hello Wo");
printf("val:%d\n", "Hello Wor");
printf("val:%d\n", "Hello Worl");
printf("val:%d\n", "Hello World");
収量:
val:4196404
val:4196406
val:4196406\\note 2nd instance the same
val:4196409
val:4196413
val:4196418
val:4196424
val:4196431
val:4196439
val:4196448
val:4196458
val:4196469
@Rasmusが言っていたように:
char * insert2 = (char *)(space+50);
strcpy(insert2 , "Hello world\0");// the '\0' if changing strings
問題を解決する必要があります。
しかし、あいまい/判読不能であることに加えて、メモリの浪費は言うまでもなく(すべてを計算しない限り)、これの実用的な使用法はあまり見られませんstruct
。
struct blockOfMem{
int num;
char* str1;
char* str2;
};
....
struct blockOfMem space;
space.num = 5;
strcpy(space.str1, "Hello world\0");// the '\0' if changing strings
strcpy(space.str2, "Goodbye friend\0");// the '\0' if changing strings
これにより、コードがより読みやすく、実用的に使用できるようになります。