首页 > 编程笔记 > C语言笔记 阅读:16

C语言字符串指针的用法(附带实例)

在 C语言中,没有专门的字符串变量,即没有 string 类型的变量,通常就用一个字符数组来存放一个字符串。

只有在定义字符数组时才能将整个字符串一次性地赋值给它,一旦定义完成,就只能通过数组一个字符一个字符地赋值,请看下面的例子:
char str[8] = "Hello";
str = "Hello"; //错误
str[0] = 'H'; str[1] = 'e'; str[2] = 'l'; //正确

【实例 1】通过 printf() 函数输出字符串。
#include <stdio.h>
 
int main()
{
    char string[] = "Hello!";

    printf("%s\n",string); //用%s输出整个字符串
    printf("%c\n",string[5]); //用%c输出字符数组的一个元素

    return 0;
}
编译运行,结果如下:

Hello!
!

C语言字符串的结束标志

在 C语言中,字符串总是以 '\0' 作为结尾,所以 '\0' 也被称为字符串结束标志,或者字符串结束符。'\0' 是 ASCII 表中的第 0 个字符,英文为 NUL,中文为“空字符”。

字符 '\0' 既不能显示,又没有控制功能,输出该字符不会有任何效果,该字符在 C语言中唯一的作用就是作为字符串结束标志。

C语言在处理字符串时,会从前往后逐个扫描字符,一旦遇到 '\0' 就认为到达字符串的末尾,就会结束处理。'\0' 至关重要,没有 '\0' 意味着永远也到达不了字符串的末尾。双引号包围的字符串会自动在末尾添加 '\0'。

例如,“Hello!”从表面看起来只包含 6 个字符,但其实 C语言会在最后隐式地添加一个 '\0'。


图 1“Hello!”的存储

图 1 所示为“Hello!”在内存中的存储情形。在例 1 中,声明字符数组 string 时并未指定该数组的长度,但赋予了数组初始值,因此长度是固定的,长度为 7,其中,前 6 个分别存储字符串 “Hello!” 的每个字符,而最后一个存储 '\0'。

可以通过字符指针变量指向字符串,然后进行输出,通过下面的代码可以达到同样的效果:
char *string = "Hello!";
printf("%s\n",string); //用%s输出整个字符串 

【实例 2】将一个字符串的内容复制到另外一个字符数组中。
将源字符串从第 0 个字符开始,一直到 '\0' 结束,一个字符一个字符地赋值给目标字符串,最后在目标字符串后面加上 '\0' 结束。代码如下:
#include <stdio.h>

int main()
{
    char str_a[ ] = "Hello!",str_b[20];
    int i;

    for(i = 0;*( str_a+i)!='\0';i++)
        *( str_b+i) = *( str_a+i); //将 str_a[i]的值赋给str_b[i]
    *( str_b+i) = '\0'; //在 str_b数组的有效字符之后加“\n”
    printf("string a is:%s\n",str_a); //输出 str_a数组中的全部字符
    printf("string b is:");
    for(i=0;str_b[i]!='\0';i++)
        printf("%c",str_b[i]); //逐个输出 str_b数组中的全部字符
    printf("\n");

    return 0;
}
运行结果为:

string a is:Hello!
string b is:Hello!

相关文章