将字符串的一部分拷贝到另一个字符串

主要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中。















  • 8
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 因为strcpy会将目标字符串复制过去的部分全部覆盖掉,导致原字符串被销毁,无法再使用。而且如果目标字符串长度不够长,就会发生内存溢出的问题。为了避免这些问题,我们应该使用strncpy或者memcpy函数来实现字符串复制。 ### 回答2: 在C语言中,常常需要将一个字符串复制到另一个字符串中。strcpy函数是一个很常用的字符串操作函数,但是它的使用需要非常小心,因为它容易出现内存溢出问题。在实际开发中,从安全的角度考虑,我们可以通过其他方法来实现字符串复制,而不使用strcpy函数。 一种常见的方法是使用指针来遍历原字符串并将其逐个复制到目标字符串中。下面是代码示例: ```c #include <stdio.h> void copy(char* dest, char* src) { while (*src) { *dest++ = *src++; } *dest = '\0'; } int main() { char str1[] = "Hello, world!"; char str2[20]; copy(str2, str1); printf("The new string is: %s\n", str2); return 0; } ``` 在上面的代码中,我们先定义了一个copy函数,该函数通过使用指针遍历原字符串并将其逐个复制到目标字符串中。需要注意的是,最后需要在目标字符串的结尾添加一个空字符'\0',以确保字符串的完整性。在main函数中,我们定义了两个字符串一个字符串一个目标字符串。然后调用copy函数将原字符串复制到目标字符串中,并输出结果。 另外,也可以使用strncpy函数来实现字符串复制。strncpy函数与strcpy函数类似,但是它可以指定复制的字符数,防止越界访问。下面是代码示例: ```c #include <stdio.h> #include <string.h> int main() { char str1[] = "Hello, world!"; char str2[20]; strncpy(str2, str1, sizeof(str2)-1); str2[sizeof(str2)-1] = '\0'; printf("The new string is: %s\n", str2); return 0; } ``` 在上述代码中,我们使用了strncpy函数,将原字符串复制到目标字符串中,并使用sizeof函数获取目标字符串的大小。最后,我们手动在目标字符串的结尾添加了一个空字符'\0',以确保字符串的完整性。 ### 回答3: 在C语言中,复制字符串是一项非常基础的任务。我们通常可以使用库函数strcpy来实现这个功能,但是如果我们想自己实现这个功能,也是完全可以的。下面将分几步来说明不用strcpy实现将一个字符串复制到另一个字符串中的方法。 第一步:获取源字符串的长度。这可以通过使用库函数strlen来完成,它会返回源字符串的长度。 第二步:分配目标字符串的内存。我们需要确保目标字符串具有足够的内存空间来存储源字符串的副本。我们可以使用函数malloc来为目标字符串分配内存。 第三步:将源字符串的字符逐一复制到目标字符串中。这可以通过使用循环完成,对每个字符执行复制操作。 第四步:在目标字符串的结尾添加空字符。字符串在末尾必须包含空字符,以表示它的结束。 下面是代码实现: ``` char* copy_string(const char* src) { int len = strlen(src); char* dst = (char*)malloc(len + 1); for(int i = 0; i < len; i++) { dst[i] = src[i]; } dst[len] = '\0'; return dst; } ``` 上面的代码演示了如何复制一个字符串,它将源字符串作为参数传递,返回其副本的指针。我们首先使用strlen获取源字符串的长度,然后使用malloc为目标字符串分配内存。然后我们使用for循环逐一复制字符串的字符。最后,我们在目标字符串的结尾添加了一个空字符。 在使用malloc分配内存时,需要注意内存泄漏的问题。在使用完目标字符串之后,必须使用free函数释放它的内存空间。 在实际编程中,我们还可以使用其他方法来完成字符串复制任务,例如,使用strncpy函数、memcpy函数或使用指针操作等等。但是,无论使用何种方法,我们必须确保目标字符串具有足够的内存空间来存储源字符串的副本,并且在目标字符串末尾添加一个空字符作为字符串结束标识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值