【问题标题】:Segmentation fault error (core dumped)分段错误错误(核心转储)
【发布时间】:2014-08-04 09:28:06
【问题描述】:

我在下面的代码中收到Segmentation fault (core dumped) 错误。

请指出我哪里出错了?

#include "string.h"
int main(){
char *str=NULL;
strcpy(str,"something");
printf("%s",str);
return 0;
}

http://codepad.org/Wo9dIcnK

我正在浏览一个发现此问题并尝试编译代码的站点。它说预期的输出应该是(空)。这是链接cquestions.com/2010/10/c-interview-questions-and-answers.html第13题最后一个例子

【问题讨论】:

  • 您需要让strcpy 的第一个参数指向您可能写入的已分配内存。将NULL 作为第一个参数传递往往会导致访问冲突。
  • 您分配给str 的唯一值是NULL。然后你尝试将一个字符串复制到 NULL,然后从 NULL 打印一个字符串。这应该如何工作?
  • @LightnessRacesinOrbit 你为什么会这样想? Hanlon's razor
  • @sehe:因为它非常基础,几乎在一本合适的 C 书籍的开头就涵盖了,并且在这里被问过很多很多次。然后看看下面的代表结果。
  • @LightnessRacesinOrbit:提问者似乎被一个糟糕的网站弄糊涂了。请参阅下面关于 hacks 答案的 cmets。

标签: c pointers segmentation-fault


【解决方案1】:

在将字符串复制到它之前,您需要为str 分配内存。

char *str = malloc(10) // Length of string "Something" + 1  

请注意,在将NULL 分配给str 之后,它不会像c-faq 所说的那样指向任何地方:

[...] 一个空指针绝对没有指向任何地方;它不是任何对象或函数的地址。

如果str 不是任何对象的地址,那么怎么可能复制任何东西呢?

【讨论】:

  • char *str= malloc(10); str=NULL; strcpy(str,"某事");仍然报错。字符 *str= malloc(10); //str=NULL; strcpy(str,"某事");没有错误。为什么?
  • 为什么分配空间后还要分配NULL?你知道NULL的用法吗?
  • 不完全是。我正在阅读有关 Null 的信息。我正在浏览一个发现此问题并尝试编译代码的站点。它说预期的输出应该是(空)。这是链接cquestions.com/2010/10/c-interview-questions-and-answers.html 13th question last example。
  • @User42;我刚刚访问了那个网站。我建议你远离那个网站。它不是最新的。许多答案都是基于 Turbo C++ 上的代码编译,现在已经过时了。
  • @Deduplicator;哎呀!很好的收获:)
【解决方案2】:
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
int main(){
    int size = 10;
    char *str=NULL;
    str=malloc(size);
    strcpy(str,"something");
    printf("%s", str);

}

缩进代码也很重要:$

【讨论】:

    【解决方案3】:

    你可以使用 malloc 或 strdup 在你的情况下。

    【讨论】:

      猜你喜欢
      • 2012-11-19
      • 1970-01-01
      • 2015-06-25
      • 2021-06-03
      相关资源
      最近更新 更多