C语言入门教程系列——1:字符串

本文介绍C语言中字符串处理的基本函数,如字符串长度计算、复制、比较等,并通过一个HTTP请求解析的例子展示了如何在实际编程中应用这些函数。

字符串在C语言中以\0结束,字符串相关的函数定义在<string.h>中,都是以str开头的函数,操作的字符串必须有结束符。

strlen字符串长度

strcpy复制一个字符串到另一个字符串

strcmp比较两个字符串

stricmp比较两个字符串,不区别大小写

strchr在字符串中查找一个字符,如果有在返回第一个出现为止的指针

strstr查找子字符串

strcat将一个字符串附加到另一个字符串后面。

不过有时候为了操作没有结束符的字符串,也是用操作内存的函数来处理字符串:

memset设置一段内存中所有字节为某个值,常用语初始化结构体。

memcpy复制一段内存到另一个短内存

memcmp比较两个端内存

 

  1. 字符串的定义不需要写长度,编译器会自动计算,例如:
    char rn2[5] = "\r\n\r\n";
    应写成
    char rn2[] = "\r\n\r\n";
  2. 字符串复制不需要一个字符一个字符的复制,可以使用strcpy或者memcpy,前者用于复制‘\0’结尾的字符串,后者可以复制特定长度的内存块,例如:
    char a[] = "abc";
    char c[16];
    char d[16];
    strcpy(c, a): // 这时c中前四个字节为abc\0,其他字节未赋值,因此不确定
    memcpy(d, a, 2): // 这时d中前2个字节为ab,其他字节未赋值,因此不确定
  3. 对于结构体,可以通过memset来将其中所有字节都赋成0
    Request r;
    memset(&r, 0, sizeof(Request));
    或者
    memset(&r, 0, sizeof(r));
  4. 采用strchr查找字符串中的字符位置,例如:
    char *a = "abc";
    char *b = strchr(a, 'b');
    则b就指向字符串中'b'的位置,也就是说b-a等于1
  5. 同样,用strstr查找字符串中子字符串的位置,例如:
    char *a = "abcccab";
    char *b = strstr(a, "cc");
    则b-a等于2,查找子字符串第一个出现的地方。

作业

解析下面HTTP请求的各个部分,将值填入结构体:

char request[] = "POST /Login.aspx HTTP/1.1\r\nHost: test.baidu.com\r\nContent-Length: 39\r\n\r\nusername=cs&password=123456&login=login";

 

#define MAX_PARAMS_COUNT 8
struct Params {
    char Name[20]; // 参数名字
    char Value[30]; // 参数值
};
struct Request {
    char Method[10]; // 请求 方法,对上述字符串应为:POST
    char Path[512]; // 请求路径,应为:/Login.aspx
    char Host [64]; // 服务器,应为:test.baidu.com
    int ContentLength; // 39
    int ParamCount; // 3
    struct Params Param[MAX_PARAMS_COUNT];
};

转载于:https://www.cnblogs.com/benfish/archive/2011/03/16/1985768.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值