C语言 字符串

    xiaoxiao2025-12-30  8

    0727

    第八章 字符串

    一、字符串定义:以’\0’作为结尾标识的一串字符。

    字符串在内存中存储时,是以字符数组形式存储。

    字符串的管理方式(表示方式):字符指针和字符数组。

    字符串与字符数组:存储形式相同,但是字符串必须有结尾识’\0’

    二、字符串初始化:

    1char*p=“hello”;//字符指针管理字符串(字符指针存储于栈区)

    //将字符串首地址存入指针变量p中;其中“hello”存储于文字常量区。

    //1)字符指针管理字符串注意:指针p对字符串”hello”只有读的权限,并不能对字符串“hello”(即文字常量区)的内容修改。如:p=“world”。相当于修改文字常量区的自读内容。会使系统崩溃(总之:不能通过指针修改文字常量区中的内容)

    文字常量区的字符串的首地址的类型:const char*

    2char c[6]=“hello”;//字符数组管理字符串(数组c存储于栈区)

    //字符串存储于字符常量区,对数组的赋值相当于将字符串“hello”逐个拷贝。到’\0’为止。

    3char c1[]=“hello”;//同上,数组的大小根据赋值的字符串大小分配。

    //一般为了防止内容溢出,采用3)这种初始化方式。

    //2)和3)字符数组管理字符串注意:(strlen作用:求字符串的长度(不包括‘\0’)参数:字符串首地址)

    修改字符串完成后,需要保证数组中存储的依旧为字符串(即存在‘\0’结尾),否则以%s格式输出可能会出现乱码。

    三、字符串操作函数

    <string.h>

    1> strlen(char* str);//计算字符串的长度,字符数组不计算‘\0‘

    2> strcpy(char *str1,const char *str2)//复制拷贝字符串。str1:目的地址;str2:源地址。

    注意:第二个参数为const类型是为了防止通过指针修改str2

    实际上是讲

    例:char a[20];

       char* p = (char*)”hello”;

       for(int i=0;i<strlen(p)+1;i++){

          a[i]=p[i];//此时也将字符数组p最后一位的‘\0‘也赋给字符数组a。这样数组a中存的是字符串。如果没有将’\0‘赋给数组a,则数组a中存的只是字符,并不是字符串。(字符串的定义。)

    }

    printf(“%s\n”,a);

    使用strcpy函数需要注意:目的地址必须对应一块内存空间。

    strcpy(a,”hello”);//hello的类型:const char*。将“hello”的首地址作为实参。

    1char *p=“hello”;

    strcpy(p,”world”);//不合法。因为:p“指向的内存空间为文字常量区中的空间(权限为只读)

    2char *q;

    strcpy(q,”hello”);//不合法。因为:指针并没有指向一块有效内存空间,没有办法盛放字符串。

    补充:printf(char* str1);scanf(char* str2);gets(char* str3);//单指字符串的输入和输出,这里不考虑其他类型。

    printf(要输出的字符串的首地址);

    scanf(可以写入的内存空间的首地址);//输入字符串以空格或回车结束。

    gets(char* str3);//输入字符串以回车结束。

    作业一:自定义函数求字符串长度(strlen)

    int array_length(char *p){

        int num=0;

        while(*p){

            num++;

            p++;

        }

        return num;

    }

    作业二:自定义函数实现strcpy

    void str_cpy(char *p,const char *q)

    {

    while(*q)*p++=*q++;

    *p=‘\0’;

    }

    0728

    0727

    三、字符串操作函数

    3> strcmp:作用:实现两个字符串的比较。(逐个比较字符的ASCII码)

    strcmp(参数一,参数二);const char* 例:“hello”<“yes”

    返回值类型:int

    >0:参数一指向的字符串>参数二指向的字符串;

    ==0++++++++++++++==++++++++++++++++

    <0++++++++++++++++<++++++++++++++++;

    四、字符串数组:相同类型数据的集合

    字符串数组:每一个元素都是char*类型,都是字符串的首地址

    char* a[10];

    typedef char* STRING;//STRING代替char*

    STRING a[10];//等效于char* a[10];

    转载请注明原文地址: https://ju.6miu.com/read-1305486.html
    最新回复(0)