关于字符串的存储和输出问题
作者:张老师,华清远见嵌入式学院讲师。
关于字符串的存储和输出问题:
在C语言里并没有字符串类型。所以的字符串都当做一个一个的字符来处理,正是因为没有字符串数据类型,所以我们必须字符串的最后加入字符’\0’,来标记字符串的结束。
字符串有三种存储方式:
• 通过字符数组存储。此时的存储空间是可读写的,这样字符串就有被修改的可能性。在定义字符数组时可用通过字符串来赋值,通常要求字符数组长度比字符串至少多一个字符。 后面则只能通过数组下标或者指针的方式来修改字符数组,也就是修改字符串的内容。这种方式下存储字符串分配的数组空间至少等于字符串的长度加一个字节的字符’\0’。
• 常量区存储 。此时的字符串存储空间是只读,字符串不可修改。我们只能通过定义一个只能变量记录该空间的首地址。此时的存储字符串分配常量空间为字符串长度加一个字节的字符’\0’,这样更节省内存空间。但是我们还需要额外定义一个指针变量指向字符串的首地址,来访问字符串。
• 堆内存储。堆内存储需要手动分配对内存,此时的存储空间一样是可读写的。同样字符串就有被修改的可能性。这种方式下存储字符串分配的堆空间至少等于字符串的长度加一个字节的字符’\0’。还需要额外定义一个指针变量指向字符串的首地址,来访问字符串。
字符串的输出方式:
对于字符串的输入最常见使用%s格式输出,我们只需要传递字符串的首地址即可。一直输出字符到遇见字符’\0’,则表示字符串输入结束。也可以通过%c,循环输出一个字符。但是我们如何获得字符串的长度呢,这里一样需要字符’\0’。这也是为什么在处理字符串的时候必须在字符串结尾追加字符’\0’