• C语言学习笔记(8)


     

    1. 字符串入门

    字符串也称字符串字面量,是用一对双引号括起来的字符序列。

    我们也许经常会遇到字符串特别长的情况,在C#中,我们一般会用@符号来表示。

        Console.WriteLine(@"Hello
    World");

    但是在C中,我们会这样来写:

    int main()
    {
    printf("Hello "
    "world");
    return 0;
    }

    还记得我曾经讲的最多的一句话就是,把字符串当做字符数组来玩。

    其实在本质上,C语言就是把字符串作为字符数组来处理,当C语言编译器遇到长度为N的字符串时,它会为字符串字面量分配长度为N+1的内存空间。之所以为N+1,是因为在字符串的末尾以’\0’来结尾,来标识字符串的结束。

    既然,我们说字符串在编译器中以字符数组来处理,那么编译器自然会将其看成char *类型的指针。也就是说,我们可以这样来写:

    int main()
    {
    char *str="abc";
    printf("%s",str);
    }

    2. 字符数组和字符指针

    这样的两个声明:

    char str1[]="abc";
    char *str2="def";

    前者是普通的字符数组,后者是字符指针。两者都可以用作字符串,但是他们是不一样的。

    声明为数组时,就像其他常规的数组一样,可以随意修改数组中的元素,即字符串中的字符。但是用字符指针,我们是不能修改的。

    另外,声明为数组时,我们知道我们不能将这个数组名赋给其他的数组,但是如果用指针,我们则可以将该指针指向其他的字符串。

    用最简单的例子来说明:

    char str1[]="abc";
    char *str2="def";
    *str2='q'; //Error
    str1[0]='q';

    前者是错误的,后者是正确的。

    3. 声明字符数组的惯用法

    看段代码就OK了

    #define STR_LEN 10

    int main()
    {
    char str[STR_LEN+1];
    }

    在宏定义处强调的是字符串的大小,而在声明字符数组的时候,将宏定义加1,因为要存储”\0”。

    4. 字符串的输入输出

    字符串的输出方式有两种,printf和puts,下面的例子足以说明他们的区别:

    int main()
    {
    puts("Hello world");
    printf("Hello world");
    return 0;
    }

    运行结果如下:

    image

    答案就是一个有换行,一个没有换行。

    读取字符串也有两个方法:scanf和gets函数。

    我们来说下他们的区别:

    scanf会忽略掉之前所有的空白字符,然后读取所有字符,直到遇到空白字符位置。总之,scanf不会包含任何空白字符,包括空格,制表符等等。

    gets不会忽略空白字符,读取所有字符,直到遇到换行符为止。

    举个例子吧:

    int main()
    {
    char str1[100];
    scanf("%s",str1);
    printf("printf的?结á果?:%s",str1);
    }

    image

    int main()
    {
    char str2[100];
    gets(str2);
    printf("gets的?结á果?:%s",str2);
    return 0;
    }

    image

  • 相关阅读:
    第六章脑图
    20192419实验四 《Python程序设计》实验报告
    20192419 实验三《Python程序设计》实验报告
    20192419 实验二《Python程序设计》实验报告
    20192419 实验一《Python程序设计》实验报告
    小组讨论-第十章 密码学及应用
    2019-2020-1学期 20192419 《网络空间安全专业导论》第十二周学习总结 (读书笔记)
    2019-2020-1学期 20192419 《网络空间安全专业导论》第十二周学习总结 (读书心得)
    2019-2020-1学期 20192419 《网络空间安全专业导论》第十一周学习总结 (读书心得)
    2019-2020-1学期 20192419 《网络空间安全专业导论》第十一周学习总结 (读书笔记)
  • 原文地址:https://www.cnblogs.com/dongzhiquan/p/2083240.html
Copyright © 2020-2023  润新知