【问题标题】:Copy from char * to char arrray从 char * 复制到 char 数组
【发布时间】:2013-03-11 09:11:07
【问题描述】:

我的字符指针指向一些内存说“Hello world”,我想将它与其他指针进行比较,然后想执行 strcpy。我坐在可以做 char *

char *A ="hello"
char *B ="";

strcmp(A,B); // this compares correctly because B points to diff string
strcpy(B,A); // will this statment copies the string alone or both will point to same memory

【问题讨论】:

  • 嗯,你可以很容易地检查这个。
  • 指针“B”指的是只读内存位置,因此您将无法复制字符串。检查这个问题stackoverflow.com/questions/4051347/…
  • char *B 是只读的,您必须char B[6]char *b = malloc(strlen(a) + 1) 才能获得复制空间
  • 你必须先通过 malloc(6) 为 B 分配内存;获取字符串的新副本
  • 那么问题是什么?

标签: c visual-c++


【解决方案1】:
char *B ="";

这意味着B 是一个指针,并且您已指向常量字符串""

A 字符串复制到Bstrcpy(B,A);

这意味着您正在将A 的字符串复制到B 指向的内存中(并且B 指向一个常量字符串),因此这将导致未定义的行为

为避免此类问题,B 指针应指向内存空间,例如,您可以将 B 指向使用 malloc 分配的动态内存空间:

char *B = malloc(10*sizeof(char));

你可以使内存的大小与字符串大小完全相同:

char *B = malloc((strlen(A)+1)*sizeof(char));

+1 用于字符串的空终止符

避免该问题的另一种解决方案:将 B 定义为字符数组而不是指针:

char B[10];

【讨论】:

    【解决方案2】:

    您的代码将成功编译,因为 strcpy 需要目标和源 char * 作为参数。

    char * strcpy (char * 目标, const char * 源);

    但是当你执行它时你会遇到分段错误...bcoz B 指向 no 首先你必须在 B 指向的地方分配内存块,通过 B=malloc(6);

    char *A ="hello";
    char *B;
    
    B = malloc(6);
    
    strcmp(A,B);
    strcpy(B,A);
    

    一旦你这样做了,是的 strcpy 将复制一个全新的字符串。 A 和 B 都将指向两个不同的位置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-05
      • 2012-04-15
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多