【问题标题】:Passing destination string as a pointer in strcpy将目标字符串作为指针传递给 strcpy
【发布时间】:2021-09-26 07:51:55
【问题描述】:

我最近知道了一个叫strcpy的函数,strcpy的语法是char*strcpy(char * destination,const char * source),所以destination string可以是指向 char 的指针,但是我的代码的输出是 null ,为什么?

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

//Compiler version gcc  6.3.0

int main()
{
  char *text1;
  char text2[]="ahhabsha";
  strcpy(text1,text2);
  printf("%s",text1);
  return 0;
}

【问题讨论】:

  • text1 需要指向某些东西。目前它只是一个未初始化的垃圾值。试试char text1[128];char *text1 = malloc(128);
  • 我暂时不了解malloc函数,我是初学者,为什么text1一定要指向某个东西,是不是strcpy函数后面指向的是text2[0]?
  • 堆栈溢出不能替代现有的 C 引用。请从 C 书籍或教程中系统地学习。这将在任何此类参考中得到很好的介绍。
  • strcpy 顾名思义就是制作一个副本。所以目的地当然需要有自己的内存缓冲区。
  • strcpy 复制到现有分配中。这就是函数的实现方式。使用 strdup 一步分配和复制。但是,在使用指针和内存进行操作之前,您应该了解 malloc 和 free。

标签: c strcpy


【解决方案1】:

所以目标字符串可以是指向字符的指针

不,目标字符串不能是指针。

目标必须是 char 类型的连续内存区域。第一个函数参数是一个指向该区域的指针。

您的代码正确传递了一个 char 指针,但问题是指针没有指向任何内存。

通常有两种方法可以做到这一点。

  1. 像这样分配动态内存:

     char text2[]="ahhabsha";
     char* text1 = malloc(sizeof text2);  // or malloc(1 + strlen(text2));
     ...
     ...
     free(text1);
    
  2. text1改为char数组而不是char指针

    char text2[]="ahhabsha";
    char text1[sizeof text2];
    

在第二种情况下,text1 在您调用strcpy 时会自动从“char 数组”转换为“char 指针”

顺便说一句:

在许多系统上还有非标准的strdup 函数。它执行内存分配和字符串复制,因此您无需调用strcpy。喜欢:

    char text2[]="ahhabsha";
    char* text1 = strdup(text2);
    printf("%s\n", text1);
    free(text1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-17
    • 2015-06-03
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 2014-03-08
    • 2014-02-20
    相关资源
    最近更新 更多