繁体   English   中英

传递字符时出现分段错误

[英]Segmentation fault when passing char

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

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

这是我制作的get file方法。 我只希望它将“文件”返回给main方法,以传递给其他多个方法,但是根据调试,我在scanf语句之后直接遇到了分段错误。

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

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

使用这样的东西,

void get_file(char* file)

代码中的另一个问题是返回类型。 如果要从该函数返回某些内容,则需要更改其返回类型(不应为void )并在调用函数中接收它。

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

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

scanf(" %59s",file);

一个char数组衰减 (当传递给函数时隐式转换)到一个指针 ,而不是char 像这样定义get_line

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

代替。

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

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

 void get_file(char* file)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM