[英]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;
}
file
是main()
的数组。 您必须使用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.