看着this,我很肯定你試圖將"H"
(這是一個常數在C中)int存儲到insert2中。換句話說,你試圖在我的編譯器中存儲一個int
(sizeof("H") == 2
)類型的字符(sizeof(char) == 1
)。從那裏,這取決於你的編譯器允許這種行爲或拋出一個錯誤。 Plus "Hello world"
是一個只存在於ROM中的不可變字符串,因此您無法直接修改該字符串。
爲了證明,我跑:
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
這使得你的代碼更具可讀性和實用性。