程序中如何使用字符串
字符串常量可以赋值给一个字符指针或者一个字符数组,比如:
/*1*/char *str = “this is a string”;
/*2*/char str2[]= “this is a string”;
/*3*/char str3[100] = “this is a string”;
语句1将”this is a string”赋值给了字符指针str。此时,str的值为”this is a string”的第一个字符的地址。实际上,”this is a string”这个常量字符串存储在C语言程序的常量区。而str即指向了存储这个常量字符串的首地址。
语句2会将常量区中的”this
is a string”拷贝到数组里面。并且数组的长度将为”this
is a string” (包含’\
语句3会将常量区中的”this is a string”拷贝到数组里面。并且数组的长度将为100个字节。语句3和语句2的区别是语句2没有指明数组的长度,那么数组的长度就是字符串的长度。
对于上面的3个赋值表达式,分别使用sizeof和strlen的计算结果又是什么呢?
sizeof(str) = 为指针的长度,所以在X86上是4,在X64上是8。
sizeof(str2)=17。str2数组的长度,但str2没有显示指出数组的长度,而是按照分配给它的字符串的长度来分配。所以,值为17。
sizeof(str3)=100。Sizeof计算的是str3数组的长度,所以结果为100。
strlen(str)=16。Strlen计算的是字符串的字符个数(不喊’\
strlen(str2)=16。原因同上。
strlen(str3)=16。原因同上。
当然,也可以把字符串存放在动态分配的内存空间中。比如:
char *p = (char *)malloc(100);
if (p == NULL)
return;
memset(p, 0, 100);
strcpy(p, “hello world”);
这样,以p为首地址的内存中将存放着”hello world”这个字符串。