【问题标题】:Segmentation fault when passing char传递 char 时出现分段错误
【发布时间】:2015-11-29 14:34:47
【问题描述】:

这是我的主要功能的一部分,我将 char 数组传递给 get file_file(file) 函数。

int main(int argc, char** argv) {
    char file[60];
    get_file(file);
    return (EXIT_SUCCESS);
}

这是我做的获取文件的方法。我只是希望它将“文件”返回给主要方法以传递给多个其他方法,但是根据调试,我在 scanf 语句之后直接得到分段错误。

    void get_file(char file) {
        printf("What file do you want?");
        scanf(" %s",file);
//do other stuff
    return file;
    }

【问题讨论】:

    标签: c netbeans


    【解决方案1】:

    filemain() 中的一个数组。您必须使用pointer to char 变量来接收它,因为array 在发送到函数时会衰减为pointer

    使用类似的东西,

    void get_file(char* file)
    

    代码中的另一个问题是返回类型。如果你想从函数中返回一些东西,你需要改变它的返回类型(它不应该是void)并在调用函数中接收它。

    在您的情况下,您不需要返回file,因为输入存储在发送给函数的地址中。

    但请注意,您需要指定要读取的字符串的大小,否则会导致缓冲区溢出。

    scanf(" %59s",file);
    

    【讨论】:

    • 如果函数使用voidreturn 会起作用吗?
    【解决方案2】:

    char 数组decays(传递给函数时隐式转换)到指针,而不是char。定义get_linelike

    void get_file(char* file) {
        ...
    }
    

    改为。

    一个char 只能容纳一个字符,因此会发生缓冲区溢出。另外,sizeof(char*) 通常大于sizeof(char) == 1,所以地址被截断,很可能变成无效地址。
    不过,编译器实际上应该发出一些警告。

    【讨论】:

      【解决方案3】:

      get_file 声明中缺少 *。您想将指针传递给数组,而不是位置本身的值。这样,您应该输入

       void get_file(char* file)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-20
        • 1970-01-01
        • 2021-12-20
        相关资源
        最近更新 更多