这是我的主要功能的一部分,我将char数组传递给get file_file(文件)函数。
@user.send_activation_email
UserMailer.account_activation(@user).deliver_now
这是我制作的获取文件方法。我只是希望它将'file'返回到主方法以传递给多个其他方法但是我在scanf语句之后根据调试直接得到了分段错误。
I = [ 0 1.1 4 9.5 15.3 19.5 23.1 26 28.2 30.8 33.3 35.9];
E_up = [ 5.8 10.5 28 60.3 85.5 100.3 108 113.2 117 120.5 123.5 126];
Iw = [ 34 31.5 28.2 23.9 19.9 16.1 13 8.1 3.5 1.2 0 NaN];
E_down = [124.6 122.5 118.8 112.2 103.9 93.1 81.6 59.1 29.6 14.5 9.5 NaN];
n = 800/1500;
plot(I,E_up,Iw,E_down)
grid on
legend ('up', 'down')
%loop for mean values
for ii = 1:length(I)
E1(ii) = ((E_down(13-ii)));
E2(ii) = E_up(ii);
E4(ii) = mean([E1(ii),E2(ii)]);
I2(ii) = Iw(13-ii)
I3(ii) = mean([I2(ii),I(ii)])
end
hold on
plot(I3,E4,'r-')
plot(I3(7),E2(7),'co',I3(7),E1(7),'ro')
plot(I3,E1,'c-',I3,E2,'g-')
答案 0 :(得分:4)
file
是main()
中的数组。您必须使用pointer to char
变量接收该变量,因为array
在发送到函数时会衰减为pointer
。
使用类似的东西,
void get_file(char* file)
代码中的另一个问题是返回类型。如果你想从函数中返回一些东西,你需要改变它的返回类型(它不应该是void
)并在调用函数中接收它。
在您的情况下,您不需要返回file
,因为输入存储在发送到函数的地址中。
请注意,您需要指定要读取的字符串的大小,否则会导致缓冲区溢出。
scanf(" %59s",file);
答案 1 :(得分:3)
char
数组衰减(传递给函数时隐式转换)到指针,而不是char
。定义get_line
,如
void get_file(char* file) {
...
}
代替。
一个char
只能容纳一个字符,因此会发生缓冲区溢出。此外,sizeof(char*)
通常大于sizeof(char) == 1
,因此地址被截断,可能会变成无效的地址。
但编译器实际上应该发出一些警告。
答案 2 :(得分:1)
您错过了get_file
声明中的*。您希望将指针传递给数组,而不是位置本身的值。这样,你应该输入
void get_file(char* file)