微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将目标字符串作为 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;
}

解决方法

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

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

目标必须是一个连续的 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 会自动从“字符数组”转换为“字符指针”

顺便说一句:

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。