在C语言编程中,我们一般用一个字符数组来存放一个字符串。例如,我们想存储这个字符串“http://i.cnblogs.com”,这个字符串一共有20个字符,要存放下这个字符串,我们需要一个长度为21的字符数组。为什么是21个而不是20个呢?在C语言中,字符串数组默认以‘\0‘结尾,所以我们一共需要一个长度为21的字符数组来存储这个变量。
unsigned char text[21] = “http://i.cnblogs.com”;
既然我们已经知道了如何存放一个字符串,那下面我们来讨论另外几个问题。首先,已知一个字符数组存放了一个字符串,如何求解这个字符串有多长呢?解决这个问题还要从字符串的存储原理入手。在前文中,我们已知了存储字符串末尾的字符为‘\0‘,那么我们就可以利用循环来扫描这个字符数组,以扫描到‘\0‘为结束标志,从而求解出字符串的长度。
unsigned char get_text_length(unsigned char *sp)
{
unsigned char text_length=0;
while(*sp) /*判断字符是否为‘\0‘*/
{
text_length++;
*sp++; /*指向数组的下一位*/
}
return text_length;
}
此外,关于字符数组的初始化问题,我们除了可以在申明字符的数组的同时利用双引号将字符串直接赋值外,是否还有其他方法呢?
方法一:
unsigned char text[] = "www.google.com";
方法二:
unsigned char text[20];
strcpy(text, "www.google.com");
注意,方法二中调用了系统函数strcpy(),该函数在string.h中定义了。