strcmp函数和strcpy函数

(一)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")   /*正确的字符串比较*/

(二)strcpy函数  

         strcpy函数用于实现两个字符串的拷贝。一般形式是:  

                 strcpy(字符中1,字符串2)

         其中,字符串1必须是字符串变量,而不能是字符串常量。strcpy函数把字符串2的内容完全复制到字符串1中,而不管字符串1中原先存放的是什么。复制后,字符串2保持不变。  

例:    

         注意,由于字符串是数组类型,所以两个字符串复制不通过赋值运算进行。  

         t=s;   /*错误的字符串复制*/

         strcpy(t,s);   /*正确的字符串复制*/

<< `strcpy` `strcmp` 是 C 标准库中的两个非常常用的字符串处理函数。 ### strcpy 函数 **定义与原型** ```c char *strcpy(char *dest, const char *src); ``` - **参数说明**: - `dest`: 目标字符数组(目标缓冲区),该空间必须足够大以容纳来自源 (`src`) 的所有字符,包括终止空字符 `\0`。 - `src`: 源字符串指针,即要复制的内容。 - **返回值**: 返回指向 `dest` 的指针。 - **功能描述**: 将 src 所指向的字符串拷贝到 dest 中,并且会将末尾的 '\0' 字符也一起复制过去。如果目的地址的空间不够,则可能会造成内存溢出等问题。 #### 使用示例 ```c #include <stdio.h> #include <string.h> int main(){ char source[50] = "Hello"; char destination[50]; // Copy string from source to destination. strcpy(destination, source); printf("Copied String: %s\n", destination); } ``` ### strcmp 函数 **定义与原型** ```c int strcmp(const char *str1, const char *str2); ``` - **参数说明**: - `str1`, `str2`: 需要比对的两串字节序列或 ASCII 编码表示的文字内容. - **返回值**: 如果 str1 str2 完全相同则返回零; 若第一个不匹配处前者的小于后者就返回一个小于 0 的数;否则为大于 0 的整数值 - **注意事项**: 进行的是逐个比较对应位置上的ASCII码大小关系直到遇到'\0',所以对于非打印字符如控制符号等也需要谨慎对待! #### 示例用法 ```c #include <stdio.h> #include <string.h> int main() { int ret; /* Comparing two strings */ ret = strcmp("abc", "def"); if(ret > 0) puts("\"abc\" is greater than \"def\""); else if (ret == 0) puts("\"abc\" equals \"def\""); else puts("\"abc\" is less than \"def\""); return(0); } ``` 使用这两个函数时需要注意以下几点: 1. 在调用 `strcpy()` 前确保有足够的空间存储被复制过来的数据避免越界写入导致程序崩溃或者安全漏洞。 2. 对比结果仅适用于区分大小写字母、数字其他可显示字符间的排序逻辑; 不建议直接用于其他编码集比如 Unicode 或者多字节字符环境里头判断相等情况因为它们内部可能还包含有更多额外的信息字段影响最终判定结论正确性。 3. 当涉及到用户输入或者其他不确定来源的数据时候应当考虑先做必要的清理工作例如去除前后空白再进行后续操作防止意外情况发生.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值