我很困惑为什么以下不起作用:
char * f = "abcdef";
strcpy(f, "abcdef");
printf("%s",f);
char s[] = "ddd";
strcpy(&s[0], "eee");
printf("%s", s);
Run Code Online (Sandbox Code Playgroud)
在这两个例子中,strcpy收到了一个char*但是在第一个例子中它死了一个可怕的死亡.
char * f = "abcdef"; 定义一个指向"abcdef"的char指针,该指针位于只读区域,因此您无法写入此位置
char s[] = "ddd";在堆栈上定义一个可写的char数组.
在第一个示例中,您有一个指向字符串文字的指针.这个指针应该是const char *,因为任何修改字符串文字的尝试都是未定义的行为.但是,由于遗留原因,您可以使用a char *指向它.但你仍然不应该试图修改它.
在第二个版本中,您有一个bog标准数组,其内容恰好初始化为等同于您的字符串.这是可以修改的,因为它是你的阵列.
第一个示例是 achar *到字符文字(文字是"something")。字符文字是只读的,尝试写入它们可能会导致崩溃。你的第一个指针实际上应该是const char *f = "abcdef";,这strcpy不会发生。