【问题标题】:Segmentation fault (core dumped) error by strcpy() in CC 中 strcpy() 的分段错误(核心转储)错误
【发布时间】:2015-08-10 16:22:11
【问题描述】:

我正在尝试编写一个可以读取/写入 rolodex 信息的程序(该文件将默认命名为 myRolodex)。但我认为这行:strcpy(filename,"myRolodex"); 在我的 GCC 编译器中导致分段错误(核心转储)。

任何帮助解决将不胜感激!

#include<stdio.h>
#include <stdlib.h>
#include<string.h>
#include<stdbool.h>
int main(int argc, char* argv[]){
    char filename[250];
    if (argv[1]==NULL){
        strcpy(filename,"myRolodex");
    }
    strcpy(filename,argv[1]);
    printf("%s",filename);
    return 0;
}

【问题讨论】:

  • strcpy(filename,argv[1]); 之前添加else。否则,即使argv[1]NULL,这个strcpy 也会执行。
  • @Cool Guy,strcpy 仅在 argvNULL 时才会执行。我认为这是他的意图,因为他希望名称默认为"myRolodex",如果argv[1] 等于NULL。但是你在第二个 strcpy 上是对的,在那之前应该有一个 else。
  • 顺便说一句,与其检查argv[1] 是否为NULL,不如检查argc &lt; 2 是否为NULL。对于您的问题,确实您必须添加一个else 声明。

标签: c segmentation-fault strcpy


【解决方案1】:

更正你的代码如下

if (argv[1]==NULL){
        strcpy(filename,"myRolodex");
    }else{
    strcpy(filename,argv[1]);
}

问题是,即使你检查 argv[1]==NULL, statment strcpy(filename,argv[1]);将始终执行,因为它不在 else 块中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2017-02-25
    相关资源
    最近更新 更多