今天在看前辈的代码,对其中字符串复制有时候直接把指针赋给另一个指针,有的malloc一个内存,然后把整个字符串的值拷贝过来,有点费解,就研究了一下,会了之后发现也没什么奥秘,其实很简单,不过还是记录一下比较好。
先写结论:如果要拷贝的源字符串的内存会被回收,那么就必须malloc一个内存再拷贝整个字符串(有时候malloc是防止修改源字符串,不过不考虑这个因素),如果不会被回收则不用。
下面是测试代码

#include <stdio.h>
#include <string.h>

typedef void(*str_cpy_slk)(char *name);
void test(str_cpy_slk cb);
void call_back(char *name);

char *test_name = NULL;
int main(void)
{
  test(call_back);

  printf("name:%s\n", test_name);

  return 0;
}

void test(str_cpy_slk cb)
{
  char myname[8] = {0};
  snprintf(myname, sizeof(myname), "%s", "slk");
  printf("myname:%s\n", myname);
  cb(myname);
}

void call_back(char *name)
{
  test_name = name;
  printf("test_name:%s\n", test_name);
}

已不可显示。
用malloc开辟内存,再赋值的话,则可以

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef void(*str_cpy_slk)(char *name);
void test(str_cpy_slk cb);
void call_back(char *name);

char *test_name = NULL;
int main(void)
{
  test(call_back);

  printf("name:%s\n", test_name);

  free(test_name);

  return 0;
}

void test(str_cpy_slk cb)
{
  char myname[8] = {0};
  snprintf(myname, sizeof(myname), "%s", "slk");
  printf("myname:%s\n", myname);
  cb(myname);
}

void call_back(char *name)
{
  test_name = (char *)malloc(strlen(name) + 1);
  snprintf(test_name, strlen(name) + 1, "%s", name);
  printf("test_name:%s\n", test_name);
}

转载于:https://www.cnblogs.com/shenlinken/p/5392707.html

C语言 复制字符串 malloc相关推荐

  1. c语言字符串malloc,C语言 复制字符串 malloc

    今天在看前辈的代码,对其中字符串复制有时候直接把指针赋给另一个指针,有的malloc一个内存,然后把整个字符串的值拷贝过来,有点费解,就研究了一下,会了之后发现也没什么奥秘,其实很简单,不过还是记录一 ...

  2. C语言 | 复制字符串 不用strcpy

    例69:C语言编写一个程序,将字符数组str2中的全部字符复制到字符数组str1中,要求不使用strcpy函数. 解析:复制时「\0」也要复制过去,「\0」后面的字符不复制 . 源代码演示: #inc ...

  3. 【C/C++】C语言复制字符串及复制函数汇总(strcpy()/memcpy()/strncpy()/memmove())

    目录: strcpy() 举例: memcpy() 举例: strncpy() 举例: memmove() 举例: 我们首先来考虑一个简单的问题,我们定义了一个字符串,然后想要复制这个字符串,在C语言 ...

  4. 用c语言复制字符串的元音字母,急求:编写程序,将一个字符串中的元音字母复制到另一个字符串,然后输出。...

    #include #include void str(char a[100],char b[100]) { int i=0, j=0; while(a[i]!='\0')//'\0'代表ASCLL码0 ...

  5. linux中复制字符串出错,C语言实现字符串的复制的两种方法

    本文将要为您介绍的是C语言实现字符串的复制的两种方法,具体操作方法: 利用数组实现 1 #include 2 #include 3 4 void copy_string(char str1[],cha ...

  6. c语言字符串提取第二个字符,c语言如何复制字符串(取前n个字符)strncpy()函数的应用实例...

    c语言如何复制字符串(取前n个字符)strncpy()函数的应用实例.函数需引入的头文件:#include 定义strncpy()函数:char * strncpy(char *dest, const ...

  7. C语言 | 将字符串中的元音字母复制到另一个字符串中

    例70:C语言写一个函数,将一个字符串中的元音字母复制到另一字符串,然后输出. 解析:if语句判断一下每一个字母是否符合元音字母,读者看着道题的时候,需要注意一点的是如果用scanf函数是否可以,思考 ...

  8. 【C语言】模拟实现库函数 strcpy(复制字符串内容) 与 strlen(求字符串长度)

    前言:对于库函数的使用,我们不仅要会使用方法,更要知晓使用原理,而知晓使用原理最好的方法就是模拟相应库函数的使用. 今天我们就来模拟 strcpy(复制字符串内容) 与 strlen(求字符串长度)这 ...

  9. c语言不用strcpy复制字符串,C语言不使用strcpy函数如何实现字符串复制功能

    前言继承是OOP设计中的重要概念.在C++语言中,派生类继承基类有三种继承方式:私有继承(private).保护继承(protected)和公有继承(public).一.继承规则继承是C++中的重要特 ...

  10. perm函数c语言_理解C语言(三) 字符串处理函数

    1 字符串基础 字符串是一种重要的数据类型,有零个或多个字符组成的有限串行. 定义子串: 串中任意个连续的字符组成的子序列,并规定空串是任意串的子串,任意串也是其自身的子串,如字符串"ade ...

最新文章

  1. 在报No suitable driver found for jdbc:mysql情况下,我是如何一步一步实现jmeter成功连接mysql...
  2. Hyperledger Besu(3)“多用户架构”和“插件”
  3. matlab中的分类器使用小结(SVM、KNN、RF、AdaBoost、Naive Bayes、DAC)
  4. 贪心问题JAVA_java背包问题(贪心法)
  5. Linux 进阶笔记(一)
  6. mysql php 迁移_MySQL数据复制、迁移、转换
  7. PKU 学生的反馈 2009-1
  8. 求数列1/3到1/n之和
  9. 合并果子(洛谷-P1090)
  10. 微服务之服务网关Gateway
  11. LSF_管理用户、主机和队列_1
  12. 直接使用 Microsoft WinPE 工具 安装大于 4GB 的 WIM 文件
  13. 多功能日期查询小工具
  14. 名帖298 王铎 行书《罗汉跋》
  15. 软件测试英语单词词汇
  16. 【数学建模】模糊数学运算——python实现各类运算
  17. 大数据生态:Hadoop生态圈
  18. 微软云-ASR容灾技术经验分享
  19. OpenGL 立方体平行斜投影的绘制
  20. 区块链创新之路,该何去何从?

热门文章

  1. Python爬虫从入门到放弃(二十三)之 Scrapy的中间件Downloader Middleware实现User-Agent随机切换...
  2. 1章 SpringBoot介绍
  3. STC单片机串口输出ADXL335角度值
  4. 【转】STL中map用法详解
  5. CodeForces992E 二分 + 树状数组(线段树)
  6. jQuery常用操作部分总结
  7. 将txt文档按行分割
  8. Python之路-(列表、元组、字典、集合、字符串)
  9. 用自己的语言解释一段简单的汇编
  10. 将excel中的数据导入到oracle数据库中