赞
踩
数组中没有将第二个数组中前N个字符追加到第一个数组的尾部的函数
但是char类型数组本身就是表示字符串的啊,直接强制转换成char*不就可以了吗? ->其实还是有点区别的
//返回值char* 数组 直接修改了dst数组; //参数: char *dst:目标字符串 const char *src:源字符串 size_t n:插入src的字节数 char *strncat(char *dst, const char *src, size_t n) { if (n != 0) { //保存两个操作字符串的首地址 char *d = dst; const char *s = src; //将指向dst的指针d移到字符串末尾,指向'\0' while (*d != 0) d++; //复制过程 do { //如果到达了src字符串的末尾,则复制终止 if ((*d = *s++) == 0) break; //移向下一个元素 d++; } while (--n != 0); //复制后剩余要复制的元素个数 *d = 0; //复制完毕后,将最后一个元素置为'\0' } return dst; }
#include <stdio.h>
#include <string.h>
int main(void )
{
char str[10] = {0};
char dst[20] = {0};
strcpy(str, "123456");
memcpy(dst, "\x42\x43\x44\x45\x46\x47\x48", 7);
strncat(dst, str, 3);
printf("%s\n", dst);
}
#include <stdio.h> #include <string.h> int main(void ) { int i =0; char str[10] = {0}; char sendByte[12] = {0}; memcpy(str, "\x42\x43\x44\x45\x00\x46\x47", 7); printf("字节输出:\n"); for(i=0; i<10; i++) { printf("%X\t", str[i]); } printf("\n字符串输出:%s\n", str); sendByte[0] = 0x1F; //7 -> 表示追加过之后的位置下标 strncat(sendByte, str, 7); sendByte[11] = 0x1A; printf("追加后字节输出:\n"); for(i=0; i<12; i++) { printf("%X\t", sendByte[i]); } }
为什么数组 str 没有全部追加到sendByte数组上?
首先,发现,函数的char *strncat(char *dst, const char *src, size_t n) 中参数 src如果结束,整个程序就会结束;
//如果到达了src字符串的末尾,则复制终止
其次,这里边最重要的一点就是,数组中的0x00 对应着 字符串中的 ‘\0’
也就是说当char str[] 数组中,比如这段字符 “\x42\x43\x44\x45\x00\x46\x47” /x00 -> 0x00 ,此时字符串就只能显示0x42-0x45, 表示是这一段的字符串,因为字符串看到 ‘\0’就以为是结束
作为char类型数组,我们可以任意赋值,一般可以这样赋值
char str[10] = {0};
//数组赋值
memcpy(str, "\x42\x43\x44\x45\x00\x46\x47", 7);
//字符串赋值
strcpy(str, "BCDEF");
char *strncat(char *dst, const char *src, size_t n);
使用 strncat 追加字符串可以的,但是如果追加数组一定要考虑清楚自己的数组中会不会出现0x00这个值?
将src数组插入dst数组中的 下标 start开始到end结束
//将src数组插入dst数组中的 下标 start开始到end结束 //参数: //char *dst:目标数组 //const char *src:源数组 //int start:开始插入下标位置 //int end:结束插入下标位置 //注意:可能遇到数组越界问题,操作请谨慎 int memcat(char *dst, const char *src, int start, int end) { int ret = 0; ret = (dst != NULL) && (src != NULL) && (start >= 0) && (start <= end); if(ret) { int i = start; for(; i <= end; i++) { *(dst + i) = *src++; } } return ret; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。