在 strcpy 中将目标字符串作为指针传递

Passing destination string as a pointer in strcpy

我最近知道了一个叫做 strcpy 的函数,strcpy 的语法是 char*strcpy(char * destination,const char * source) ,所以目标字符串可以是指向 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;
}

so destination string can be a pointer to char

不,目标字符串可以不是指针。

目的地必须是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];
    

在第二种情况下,当您调用 strcpy

时,text1 会自动从“字符数组”转换为“字符指针”

顺便说一句:

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

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