我试图在if-else中给出Char数组的大小,具体取决于文件中的行数。但是当我之后尝试使用它时,它会出错:“array unclared”
FILE *f=fopen("G:\\workspaceC\\small1.txt","r");
while((c=fgetc(f))!=EOF)
{
if(c=='\n')
no_of_lines++;
}
printf("no_of_lines: %d",no_of_lines);
int fclose(FILE *f);
if(no_of_lines<10){
char b[30];
}
else if(no_of_lines>10 && no_of_lines<15){
char b[60];
}
else{
char b[106];
}
for(z=0;z<size;z++)
{
if(c==b[z]) ///////Here it gives error: "b undeclared"
{
flag=1;
break;
}
}
答案 0 :(得分:2)
在if
块中声明的数组将在块中变为本地。在技术术语中,其范围仅限于if
块。这就是你得到错误的原因。将声明移到块外。
但是还有更多问题:
因此,更好的方法是首先使用文件API查找文件大小,为此动态分配空间,将内容读入动态分配的空间并适当处理数据。
答案 1 :(得分:2)
您已在if
块中声明了数组 b 。因此,只有if
块可见。并且,它在if
块之外无法看到。
如果您按照以下方式更改代码,您将实现您想要的目标。
int size;
if(no_of_lines<10){
size = 30;
}
else if(no_of_lines>10 && no_of_lines<15){
size = 60;
}
else{
size = 106;
}
char b[size];
答案 2 :(得分:1)
---->
在IF-ELSE
语句中,分配内存而不是声明数组。
malloc((sizeof(char)*30/60/106)
答案 3 :(得分:0)
您在块代码{}中声明了您的数组。无论此块是否在if语句中,您只能在此块中访问此数组。
如果要动态更改数组的大小,请在函数开头的指针上声明,然后为其动态分配内存(例如,使用malloc)。但是,似乎在你的情况下,你可以在数组上声明并给它你需要的最大尺寸。