我在代码中发现了错误(C)。我声明零长度数组,它的工作原理。问题是我不知道那是危险的吗?我尝试将其更改为
char c[1];
c[0] = '\0'; //or char c[1] = {""};
但它不起作用。有我的代码:
void TranslateFile(struct keyElem* guard,FILE* inpFile,FILE* outFile)//"tłumaczy" plik spowrotem
{
char x;
char c[0] = {""};
char tab[100] = {""};
char empty[100] = {""};
while((feof(inpFile)==0))
{
fscanf(inpFile,"%c",&x);
if(x==' ')
{
c[0] = SearchChar(guard,tab);//get char from list
fprintf(outFile,"%s",c);
strcpy(tab,empty);
x = '\0'; //puts(tab);
}
if(x != ' ')
{
c[0] = x;
strcat(tab,c);
}
}
}
我不知道是否保存,我不知道如何改变它。
答案 0 :(得分:1)
答案 1 :(得分:0)
标准不允许:
如果表达式是常量表达式,则它应具有值 大于零。 Array Declarations - From the standrad
然而,GCC允许:
零长度数组的非空初始化被视为任何 初始化元素多于数组的情况, 因为给出了关于“阵列中多余元素”的适当警告, 并忽略多余的元素(在这种情况下都是这些元素)。 GCC - Arrays of Length Zero
因此,所有初始化值都被忽略,您无法以任何实际方式使用该数组。
答案 2 :(得分:0)
好的,我修好了用户@wyc说。我写了
void TranslateFile(struct keyElem* guard,FILE* inpFile,FILE* outFile)//"tłumaczy" plik spowrotem
{
char x;
char c[2] = {'\0','\0'};
char tab[100] = {""};
char empty[100] = {""};
while((feof(inpFile)==0))
{
fscanf(inpFile,"%c",&x);
if(x==' ')
{
c[0] = SearchChar(guard,tab);
fprintf(outFile,"%c",c[0]);
strcpy(tab,empty);
x = '\0';
printf("[%s]\n",c);
}
if(x != ' ')
{
c[0] = x;
strcat(tab,c);
}
}
}
它确实有效。谢谢你们所有人的帮助。我很有意思,所以我还没有直觉;)