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 }

原文地址:https://www.cnblogs.com/dongjian16/p/6739117.html