传递char时出现分段错误

时间:2015-11-29 14:34:47

标签: c netbeans

这是我的主要功能的一部分,我将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-')

3 个答案:

答案 0 :(得分:4)

filemain()中的数组。您必须使用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)