正确获得字符串“变量”的方法:
- char str[] = {"abc"};
- char str[] = "abc";
- char str[] = {'a','b','c','\0'};
- char str[4] = {'a','b','c','\0'};//注意:数组长度一定要给结尾符一个位置。
- char *str =(char *)malloc(sizeof(char)*4);
strcpy(str,"abc");
使用动态内存申请的方式获得的字符串和上面几种方式获得的字符串的区别就在去,上面几种字符串是局部变量,退出函数后空间就会被释放,而这种方式获得的内存空间除非被手动释放,否则不会释放(指针变量会被自动释放)。
注意,以下两种声明并初始化的方式是错误的:
- char str[] = {'a','b','c'};
因为 str 将被认为是一个长度为 3 字节的字符数组,所以没有预留给结尾符 \0 的空间,这样很多对字符串的操作都将出错。 - char *str ="abc";
这种方式得到的字符串是常量,不可修改,赋值时是将常量区的地址赋值给指针。
此外,声明好后的字符串变量用 = "abc" 进行赋值,将会把 "abc" 在内存的常量区的首地址赋值给前面的变量,这显然是不对的。
如有错误,还请斧正,我的邮箱 617491383@qq.com。