c - strcpy 段错误 C

标签 c strcpy

我正在学习一些新东西,但被困在一个简单的 strcpy 操作上。 我不明白为什么第一次打印时可以,但第二次却不行。

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

int main()
{
    char *name;
    char *altname;

    name=(char *)malloc(60*sizeof(char));
    name="Hello World!";
    altname=name;
    printf("%s  \n", altname);
    altname=NULL;
    strcpy(altname,name);
    printf("%s  \n", altname);
    return 1;
}

最佳答案

问题从这里开始:

name=(char *)malloc(60*sizeof(char));
name="Hello World!";

您用字符串文字替换了 malloc 返回的值。

  1. 您泄漏了内存(因为您无法重新获得 malloc 返回的指针值)。所有对 malloc 的调用都与对 free 的相应调用相匹配。由于该指针值消失了,因此使用该指针值调用 free 的机会也消失了。

  2. 您进一步写入 NULL 指针,这是未定义的行为(在您的情况下,产生了段错误)。

关于c - strcpy 段错误 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25531341/

相关文章:

java - 返回和访问 jna 中结构对象的数组

c - 如何检查输入的数字是否为正数?

c++ - 将 char 数组连接在一起

将一维字符串复制到二维数组元素中

C:string 在 malloc 和 strcpy 之间被损坏

c - 寻找多个目标字符时解析单词的最佳方法是什么

c - gcc 的 -fstack-protector 选项如何防止堆栈崩溃?

c - 如何迭代结构中的所有项目?

c - 如何在没有第 3 方软件的情况下生成唯一的、非连续的序列 key ?

C++ 未使用我自己的字符串复制函数按预期打印