主要3中实现方式:strncpy()、string类、memcpy()
通过string实现更方便。
1、strcpy()
无法实现将字符串的一部分拷贝给另一个字符串。
2、strncpy()
利用标准库函数strncpy(),可以将一字符串的一部分拷贝到另一个字符串中。strncpy()函数有3个参数:第一个参数是目录字符串;第二个参 数是源字符串;第三个参数是一个整数,代表要从源字符串拷贝到目标字符串中的字符数。以下是一个用strncpy()函数拷贝字符串的一部分的例子:
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
char buf[20]="6.0 1257487794/n";
char da[5]={0};
char num[15]={0};
int i=0, j=0;
strncpy(da, buf, 3);
strncpy(num, buf+(strlen(buf)-11) , 10);
printf("buf= %s, da= %s, num= %s/n", buf, da, num);
return 1;
}
在上例中,第一次调用strncpy()函数时,它将源字符串的头3个字符拷贝到da中。第二次调用strncpy()函数时,它将源字符串的最后10个字符拷贝到num中,其实现过程为:
(1)用strlen()函数计算出buf字符串的长度,即strlen(buf)。
(2)将buf的长度减去11(10是将要拷贝的字符数再加中间的‘ ’字符),得出buf中剩余的字符数,即pstrlen(buf)-11。
(3)将strlen(buf)-11和buf的地址相加,得出指向buf中倒数第10个字符的地址的指针, 即buf+(strlen(buf)-11)。这个指针就是strncpy()函数的第二个参数。
(4)在strncpy()函数的第三个参数中指定要拷贝的字符是10。
打印输出如下所示:
wangwei@wangwei-desktop:~/work/data_check$ ./test
buf= 6.0 1257487794
, da= 6.0, num= 1257487794
3、memcpy()
4、string
string类的构造函数
string(const string &str,string size_type pos=0,size_type n=npos)
将一个string对象初始化为对象 str中从位置pos开始到结尾的字符, 或者从位置开始的n个字符。
int loc1 = im_name.find_last_of('\\');
int nameLen = sizeof(im_name);
string imgName(im_name,loc1+1);
im_name为某图片的绝对全路径, 通过string类的查找函数 找到最后一个文件夹的反斜杠,得到索引后,利用string类的 构造函数,即可实现
将 im_name的字符串中的图像文件名 提取到 新的字符串 imgName中。