【问题标题】:why does the following code produce segmentation fault [duplicate]为什么以下代码会产生分段错误[重复]
【发布时间】:2017-12-04 00:27:45
【问题描述】:

我尝试使用 strcpy 将字符串处理为指针。它会导致分段错误。任何原因。

#include <stdio.h>
#include <string.h>
int main()
{   
    char *str=NULL;
    strcpy(str,"C-DAC");
    printf("%s\n",str); 
    return 1;
}

【问题讨论】:

  • 您正在尝试将内容复制到NULLNULL 不是复制内容的有效位置。
  • 告诉我,你完全忽略了char *str=NULL;吗?
  • 我不敢相信每天都会发布至少 10 个这样的问题。
  • 更改为strdup
  • @tilz0R 我不敢相信每天至少有 10 个这样的问题得到回答。如果你要抱怨它,那么你为什么要回答这样的问题并鼓励更多相同的问题呢?有很多规范的副本可供选择来关闭它。标记或关闭投票。

标签: c pointers segmentation-fault c-strings


【解决方案1】:

你的字符串指向哪里?无处可去!

这就是你有分段错误的原因。您必须将堆栈上的变量分配为数组或将其定义为指针,然后使用malloc 分配内存。使用malloc时,不要忘记包含“stdlib.h”

要么这样做:

char str[6];
strcpy(str,"C-DAC");

char *str=malloc(sizeof(*str) * 6);
strcpy(str,"C-DAC");

【讨论】:

    【解决方案2】:

    计算机内存分为不同的段。用于操作系统、代码、局部变量(称为堆栈)和全局变量的段。现在您正在初始化指向NULL 的指针,这意味着指针str 现在指向地址0。该地址根本不适用于您的程序,它适用于操作系统。为了保护您的系统,当您尝试编写该区域时,您的程序会暂停。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-08
      • 2013-05-01
      • 1970-01-01
      • 2011-01-27
      相关资源
      最近更新 更多