zoukankan      html  css  js  c++  java
  • 20170420

    程序在内存中是分段存储
    代码段:存放所有语句转换成的数字,程序运行时不可以修改
    全局段:用来记录全局变量和静态变量的存储位置,这个段落的大小不会随着程序的运行而改变
    :   
    存放局部变量,块变量,形式参数和返回值的存储位置,这个段落的大小随着程序的运行不断改变
    每当一个函数调用出现时,就从这个段落中分配一段空间用来记录它自己的变量。
    当函数调用结束时,它所分配的空间被计算机回收
    不同函数调用的空间之间,遵循后进先出的管理原则

    这个段落用来存放动态分配的存储位置,动态分配存储位置的分配和回收工作由程序员编写语句管理,如果管理错误会产生严重后果

    字符串是专门用来记录大量文字信息的
    字符串中包含多个连续的字符类型存储位置,这些存储位置记录文字信息。
    使用标准函数对字符串操作,需要包含string.h文件

    strlen   用来计算字符串中有效字符的个数(不包含)
      1 #include <stdio.h>
      2 #include <string.h>
      3 int main() {
      4     printf("字符个数是%d ",strlen("abc"));
      5     printf("sizeof %d ", sizeof("abc"));
      6
      7     return 0;
      8 }
    结果:
    字符个数是3
    sizeof 4
    strcat    用来把一个字符串追加到另一个字符串的末尾,会修改一个原来的字符串,用返回值表示新字符串
              这个函数可能造成数组下标越界,所以可能是不安全的。
     1 #include <stdio.h>
      2 #include <string.h>
      3
      4 int main() {
      5     char buf[20] = "abc";
      6     strcat(buf, "def");
      7     printf("%s ", buf); printf("%s ", strcat(buf, "def"));
      8     return 0;
      9 }
    结果:
    abcdef
    abcdef
    strncat   可以指定最多合并多少个字符到第一个字符串,所以可以避免下标越界
    strcpy    可以复制一个字符串,调用函数需要提供存储位置用来记录复制得到的新字符串,用返回值表示复制得到的新字符串,也可能造成下标越界,也是不安全的。
    strncpy   功能和strcpy类似,但只复制前n个字符
    strcmp    用来比较两个字符串的大小,比较的依据是字符的ASCII码数值
                  返回1表示前一个字符串大,返回0表示一样大,返回-1表示前一个字符串小
    strncmp   只比较两个字符串中前n个字符
    可以使用%s做占位符读写字符串
    使用scanf从键盘读字符串是不安全的
    fgets函数从任何文件得到一个字符串并放在一个数组中
    在Linux中一切都可以用文件表示,键盘是标准输入设备,用标准输入文件表示(stdlin)
    显示器是标准输出设备,用标准输出文件表示(stdout)
    需要三个参数
    1.数组名称(得到的字符串存储在这个数组的存储位置中)
    2.数组中存储位置个数
    3.要读取的文件(stdin)
    函数会在数组最后加''结束字符
    如果输入的字符个数不够多则会把最后的回车字符也读入到数组中
    读取完成后,如果输入缓冲区中还留有垃圾数据,则需要清理
      1 #include <stdio.h>
      2 #include <string.h>
      3
      4 int main() {
      5     char buf[10] = {};
      6     printf("请输入一个字符串:");
      7     fgets(buf, 10, stdin);
      8     printf("%s ", buf);
      9     if(strlen(buf) == 9 && buf[8] != ' ') {
     10         //此条件说明输入缓冲区有东西,需要清除
     11         scanf("%*[^ ]");
     12         scanf("%*c");
     13     }
     14     printf("请输入一个字符串:");
     15     fgets(buf, 10, stdin);
     16     printf("字符串是%s ", buf);
     17     return 0;
     18 }

  • 相关阅读:
    做题总结
    关于SQLSERVER中用SQL语句查询的一些个人理解
    关于SQLSERVER联合查询一点看法
    C#中怎样实现序列化和反序列化
    java内部类的使用
    C#抽象类
    匿名类
    Foreach能够循环的本质
    C#索引器
    深入了解接口的使用
  • 原文地址:https://www.cnblogs.com/dongjian16/p/6739117.html
Copyright © 2011-2022 走看看