malloc:
申请空间后要做强制转换。
字符串常量:
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char **argv)
{
int i = 0;
char str1[] = "123456";
char *str2 = "asdff";
char *str3 = (char *) malloc (sizeof (char) * 6);
str3[3] = 'K';
str3 = "12312"; //此语句存在则str3内容不可修改,即对str3进行字符串赋值后不可修改
//在赋值后实际是将新的字符串"12312"的首地址赋给str3了 str3此时成为与str2类似的字符串常量
//之后free(str3)无效 先前申明的空间没有被释放
str1[3] = 'K'; //可修改
str2[3] = 'K'; //不可修改,
str3[3] = 'K'; //不可修改,
free (str3);
return 0;
}
使用GDB调试,直接运行,结果如下:
Program received signal SIGSEGV, Segmentation fault.
0x00000000004005d9 in main (argc=1, argv=0x7fffffffdf88) at a.c:16
15 str2[3] = 'K'; //不可修改,