字符串处理函数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串处理函数相关的知识,希望对你有一定的参考价值。
![技术分享](https://image.cha138.com/20210825/b176b89feda243929853956714f32c01.jpg)
![技术分享](C:\\Users\\Administrator.ZX-201607021417\\AppData\\Local\\YNote\\data\\qqCB8E4837B89F52255A132D320D34A33C\\a81fc923aa524d6cac3b209a21443189\\clipboard.png)
memcpy函数:
- 将以 src 为起始地址处的内容复制 n 个字节到以 dest 为起始地址处的内存中去。但是memcpy函数有个限制,就是 不能出现内存重叠,否则其行为是未知的。所以使用memcpy函数的时候必须保证 不会出现内存重叠 的情况。但是基本上现在的库都会将memcpy实现的和memmove类似。
![技术分享](https://image.cha138.com/20210825/1508a0e8cfcd403ab22e12d5091afd7b.jpg)
![技术分享](C:\\Users\\Administrator.ZX-201607021417\\AppData\\Local\\YNote\\data\\qqCB8E4837B89F52255A132D320D34A33C\\31b267b4509d43158319bd4eaf730a50\\clipboard.png)
memmove函数:
- 功能和memcpy函数的功能相同,但是会考虑源内存空间和目的内存空间重叠的问题,若出现重叠,memmove函数会先进行处理在进行复制(先把源内存空间的内容复制到一个临时存储空间中,再将内容复制到目的内存空间中)。可见memmove函数在出现内存重叠的情况时可以保证 dest 中数据的正确,但是不能保证 src 中的数据还是正确的。
![技术分享](https://image.cha138.com/20210825/34e93cf8589e463ba5021d7484431c1a.jpg)
![技术分享](C:\\Users\\Administrator.ZX-201607021417\\AppData\\Local\\YNote\\data\\qqCB8E4837B89F52255A132D320D34A33C\\269cd1f8bf784f6c82dab418b20cac02\\clipboard.png)
memset函数:
- 给一段内存空间进行赋任意值。类似功能的函数还有bzero(此函数不能赋任意值,只能清零)。
![技术分享](https://image.cha138.com/20210825/8f9068cd28b540e7b64891b82bd4c345.jpg)
![技术分享](C:\\Users\\Administrator.ZX-201607021417\\AppData\\Local\\YNote\\data\\qqCB8E4837B89F52255A132D320D34A33C\\0dc881b6a54c457f89699099307630e2\\clipboard.png)
memchr函数:
- 扫描从以 s 为起始地址的前 n 个字节,如果出现了数值 c ,那么返回数值 c 的地址,否则返回NULL。
![技术分享](https://image.cha138.com/20210825/e82aafe2c18d4bcf8c6980fd651f6bcd.jpg)
![技术分享](C:\\Users\\Administrator.ZX-201607021417\\AppData\\Local\\YNote\\data\\qqCB8E4837B89F52255A132D320D34A33C\\7430aa3fb91c418ea1e75dcf4e3699b0\\clipboard.png)
memcmp函数:
- 对 s1 和 s2 开始前 n 个字节的内存空间进行比较,如果s1==s2,则返回 0 ;如果s1>s2,则返回 大于 0 的数;如果s1<s2,则返回 小于0 的数。
![技术分享](https://image.cha138.com/20210825/104929ee69bf4059b312199ae6ba2f29.jpg)
![技术分享](C:\\Users\\Administrator.ZX-201607021417\\AppData\\Local\\YNote\\data\\qqCB8E4837B89F52255A132D320D34A33C\\0c0dfa5ee5d643f18e6fa66911d87595\\clipboard.png)
strcpy函数:
- 将 src 内存处的内容复制到 dest 内存处。遇到 ‘\\0‘ 后停止复制,而且 ‘\\0‘ 也会被复制到dest 内存中去。注意,不能出现内存重叠的情况。
![技术分享](https://image.cha138.com/20210825/6874266c66c44cf29e459842e57a6c41.jpg)
![技术分享](C:\\Users\\Administrator.ZX-201607021417\\AppData\\Local\\YNote\\data\\qqCB8E4837B89F52255A132D320D34A33C\\2c15c1501a0f49d39d8217b43840fc60\\clipboard.png)
strncpy函数:
- 将 src 内存中的内容复制到 dest 内存处。遇到 ‘\\0‘ 或者复制了 n 个字节后便停止,和strcpy类似,如果前 n 个字节中有 ‘\\0‘ ,则 ‘\\0‘ 也会复制到 dest 中去,如果前 n 个字节中没有 ‘\\0’,则 strncpy 函数不会在后面追加 ‘\\0‘ 。同样,strncpy函数也不能出现内存重叠的情况。
![技术分享](https://image.cha138.com/20210825/796ac10018ba43bea5de48f0ae80e158.jpg)
![技术分享](C:\\Users\\Administrator.ZX-201607021417\\AppData\\Local\\YNote\\data\\qqCB8E4837B89F52255A132D320D34A33C\\f6ce7fe4b2c64cb695115b6988ebb082\\clipboard.png)
strcat函数:
- 将 src 中的内容追加到 dest 后面中去,在 src 中遇到 ‘\\0‘ 便结束,且将 ‘\\0‘ 添加到dest 后面。注意,这个函数也不会处理内存重叠的问题。
![技术分享](https://image.cha138.com/20210825/862e4527fefb49b094e58af024320cce.jpg)
![技术分享](C:\\Users\\Administrator.ZX-201607021417\\AppData\\Local\\YNote\\data\\qqCB8E4837B89F52255A132D320D34A33C\\2b82065d4bc44cbfbc95830f4eeb2d17\\clipboard.png)
strncat函数:
- 将 src 中的内容追加到 dest 后面去,并且在遇到 ‘\\0‘ 或者复制了 n 个字符时便停止。和strncpy函数不同,strncpy函数在复制了 n 个字节后,是不会在追加 ‘\\0‘ 的,而 strncat 函数即使复制了 n 个字节,仍然会追加一个 ‘\\0‘ 。
以上是关于字符串处理函数的主要内容,如果未能解决你的问题,请参考以下文章