查看this,我很确定您尝试将int 类型的"H"(C 中的常量)存储到insert2 中。换句话说,您试图将类型int(我的编译器上的sizeof("H") == 2)存储到一个字符(sizeof(char) == 1)中。从那里开始,由您的编译器决定是否允许此行为或引发错误。加上"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
这使您的代码更具可读性和实用性。