char *argv[]:指针数组;
argv[]是数组,数组的元素是地址(就是指针),地址的值是字符型数据(char)。strcmp函数
strcmp函数是比较两个字符串的大小,返回比较的结果。一般形式是: i=strcmp(字符串,字符串); 其中,字符串1、字符串2均可为字符串常量或变量; i 是用于存放比较结果的整型变量。比较结果是这样规定的:
①字符串1小于字符串2,strcmp函数返回一个负值;
②字符串1等于字符串2,strcmp函数返回零;
③字符串1大于字符串2,strcmp函数返回一个正值;那么,字符中的大小是如何比较的呢?来看一个例子。
实际上,字符串的比较是比较字符串中各对字符的ASCII码。
首先比较两个串的第一个字符,若不相等,则停止比较并得出大于或小于的结果;
如果相等就接着 比较第二个字符然后第三个字符等等。
如果两上字符串前面的字符一直相等,像"disk"和"disks"
那样, 前四个字符都一样, 然后比较第 五个字符,
前一个字符串"disk"只剩下结束符'/0',后一个字符串"disks"剩下's',
'/0'的ASCII码小于's'的ASCII 码,所以得出了结果。
因此无论两个字符串是什么样,strcmp函数最多比较到其中一个字符串遇到结束符'/0'为止,就能得出结果。
注意:字符串是数组类型而非简单类型,不能用关系运算进行大小比较。
if("ABC">"DEF") /*错误的字符串比较*/
if(strcmp("ABC","DEF") /*正确的字符串比较*/
3.strcpy函数
strcpy函数用于实现两个字符串的拷贝。一般形式是:
strcpy(字符中1,字符串2)
其中,字符串1必须是字符串变量,而不能是字符串常量。
strcpy函数把字符串2的内容完全复制到字符串1中,而不管字符串1中原先存放的是什么。
复制后,字符串2保持不变。
例:
注意,由于字符串是数组类型,所以两个字符串复制不通过赋值运算进行。
t=s; /*错误的字符串复制*/
strcpy(t,s); /*正确的字符串复制*/
4.void *memset(void *s,int c,size_t n)
总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
5.const
volatile
- char strchr(const char _Str,char _Val)
指针函数,返回类型为char型指针的函数。
查找字符串_Str中首次出现字符_Val的位置。
返回首次出现_Val的位置的指针,返回的地址是被查找字符串指针开始的第一个与Val相同字符的指针,如果Str中不存在Val则返回NULL。 - sizeof用法:返回值跟存储的对象、结构、数组所存储的内容没有关系,会把\0计入字符串长度。
sizeof(….)是运算符\操作符,结果类型为size_t,在头文件中typedef 为unsigned int,其值在编译时计算好的。
int a[5];
sizeof(a[5])的值在32 位系统下为4。并没有出错,为什么呢?sizeof 是关键字不是函数。函数求值是在运行的时候,而关键字sizeof 求值是在编译的时候。虽然并不存在a[5]这个元素,但是这里也并没有去真正访问a[5],而是仅仅根据数组元素的类型来确定其值。所以这里使用a[5]并不会出错。
结构体的sizeof:
让宽度为2的基本数据类型都位于能被2整除的地址上;
让宽度为4的基本数据类型都位于能被4整除的地址上。 - strlen用法:计算字符串长度,不区分是数组还是指针,以“\0”为字符串结束标记,读到\0为止的长度,不把\0计入字符串长度。
strlen(….)是函数,要在运行时才能计算。参数必须是字符型指针(char *)。 - malloc用法
- malloc返回值
- malloc使用中不释放内存的结果
- 数组和指针。
- 汇编中入栈push,出栈pop;
- 如何用指针指向一个二维数组的元素;
- 堆和栈的区别,堆和栈的主要应用场合。
- Linux系统调用
- Linux系统中锁
- static声明的全局变量在模块外的值
- 写一个简单的排序算法
- size用法
struct A
{
int a;
char b[8];
short c;
}
short 型占用2个字节。
size(A)=int a[5];
a[0]是一个元素,a 是整个数组
&a[0]是数组首元素的首地址,
&a是数组的首地址。时其意义与&a[0]是一样,代表的是数组首元素的首地址,而不是数组的首地址。但是这仅仅是代表,并没有一个地方来存储这个地址,也就是说编译器并没有为数组a分配一块内存来存其地址,这一点就与指针有很大的差别。a 不能作为左值。我们只能访问数组的某个元素而无法把数组当一个总体进行访问。所以我们可以把a[i]当左值,而无法把a当左值。其实我们完全可以把a 当一个普通的变量来看,只不过这个变量内部分为很多小块,我们只能通过分别访问这些小块来达到访问整个变量a 的目的。
a,&a 的值是一样的,但意思不一样,a 是数组首元素的首地址,也就是a[0]的
首地址,&a 是数组的首地址,a+1 是数组下一元素的首地址,即a[1]的首地址,&a+1 是下一个数组的首地址。
17. 如何比较准确的计算程序过程中栈的大小。
18. extern 用法
extern 可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,下面的代码用到的这些变量或函数是外来的,不是本文件定义的,提示编译器遇到此变量和函数时在其他模块中寻找其定义。
extern用在变量声明中常常有这样一个作用,你在.c文件中声明了一个全局的变量,这个全局的变量如果要被引用,就放在.h中并用extern来声明。
19. 七层网络结构包括什么
OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。
20. int memcmp(const void *buf1, const void *buf2, unsigned int count);
比较内存区域buf1和buf2的前count个字节。
所需头文件#include <string.h>
或#include<memory.h>
返回值
当buf1<buf2时,返回值小于0
当buf1==buf2时,返回值=0
当buf1>buf2时,返回值大于0
- 原型:
char *strstr(const char *str1, const char *str2)
;
所需头文件#include<string.h>
找出str2字符串在str1字符串中第一次出现的位置(不包括str2的串结束符)。返回该位置的指针,如找不到,返回空指针。 - 回车 代码:
CR ASCII码:/ r ,十六进制,0x0d,回车的作用只是移动光标至该行的起始位置;
换行 代码:LF ASCII码:/ n ,十六进制,0x0a,换行至下一行行首起始位置
; char *strrchr(const char *str, char c);
所需头文件#include<string.h>
找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置),并返回从字符串中的这个位置起,一直到字符串结束的所有字符。如果未能找到指定字符,那么函数将返回NULL。- sscanf()
是C语言中从一个字符串中读进与指定格式相符的数据的函数。
函数原型为:
Int sscanf( string str, string fmt, mixed var1, mixed var2 ... );
int scanf( const char *format [,argument]... );
sscanf() 的作用:从一个字符串中读进与指定格式相符的数据.
原型: int sscanf (const char *str,const char *format,........);
说明: sscanf()
会将参数str的字符串根据参数format字符串来转换并格式化数据。转换后的结果存于对应的参数内。
成功则返回参数数目,失败则返回0。
说明:
sscanf
与scanf
类似,都是用于输入的,只是后者以屏幕(stdin)为输入源,前者以固定字符串为输入源。
其中的format可以是一个或多个 {%[*] [width] [{h | l | I64 | L}]type | ' ' | '\t' | '\n' | 非%符号}
注:
1、 * 亦可用于格式中, (即 %*d 和 %*s) 加了星号 (*) 表示跳过此数据不读入. (也就是不把此数据读入参数中)
2、{a|b|c}表示a,b,c中选一,[d],表示可以有d也可以没有d。
3、width表示读取宽度。
4、{h | l | I64 | L}:参数的size,通常h表示单字节size,I表示2字节 size,L表示4字节size(double例外),l64表示8字节size。
5、type :这就很多了,就是%s,%d之类。
无符号整数的”%u”
6、特别的:%*[width] [{h | l | I64 | L}]type 表示满足该条件的被过滤掉,不会向目标参数中写入值
支持集合操作:
%[a-z] 表示匹配a到z中任意字符,贪婪性(尽可能多的匹配)
%[aB'] 匹配a、B、'中一员,贪婪性
%[^a] 匹配非a的任意字符,贪婪性