程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C語言 復制字符串 malloc,c語言字符串malloc

C語言 復制字符串 malloc,c語言字符串malloc

編輯:關於C語言

C語言 復制字符串 malloc,c語言字符串malloc


今天在看前輩的代碼,對其中字符串復制有時候直接把指針賦給另一個指針,有的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);
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved