错误C2059:语法错误:'type'

时间:2014-03-21 12:45:53

标签: c

我有错误:

main.c(10) : error C2059: syntax error : 'type'. 

此代码有什么问题?

#include <stdio.h>
#include <stdlib.h>

void getline(FILE* file, char* line)
{
    int c;
    size_t n = 0;
    while(c=fgetc(file)!='\n')
    {
      line[n++] = char(c);
    }
    line[n] = '\0';
}

int main(int argc, char* argv[])
{
    FILE* f;
    char* line = (char*)malloc(100);
    f = fopen("Saxo","r");
    if(f==NULL)
      return -1;
    getline(f,line);
    free(line);
    fclose(f);
    return 0;
}

3 个答案:

答案 0 :(得分:3)

line[n++] = char(c);是语法错误。我猜你想要演员:

line[n++] = (char)c;

NB。此投射实际上没有效果,因为int可以隐式转换为char,无论如何都会发生这种情况,因为line[n++]的类型为char

在文件未以换行符结尾的情况下,检查循环中的EOF\n也是明智之举。

另外:=的优先级较低,因此行while(c=fgetc(file)!='\n')会将c设置为10。一些括号需要修复。

答案 1 :(得分:1)

考虑到你的名字这可能是一个混乱,因为C ++允许所谓的explicit type conversions是一个表达式:

line[n++] = char(c);

所以这可以在C ++中编译好但是在C中不存在,所以你需要使用的是一个简单的演员:

line[n++] = (char)c;

但在这种情况下不是必需的。

我建议启动可能表明此行存在问题的警告:

 while(c=fgetc(file)!='\n')

clang默认警告我们,gcc不会:

 warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
while(c=fgetc(file)!='\n')
      ~^~~~~~~~~~~~~~~~~~

note: place parentheses around the assignment to silence this warning
while(c=fgetc(file)!='\n')
       ^
      (                  )

答案 2 :(得分:0)

  

您可能正在使用不允许在块中间声明变量的C版本。 C曾经要求在打开之后{和可执行语句之前'在块的顶部声明变量。

已经有来自这里的讨论

error C2275 : illegal use of this type as an expression

在这里

http://social.msdn.microsoft.com/Forums/vstudio/en-US/693b03be-4198-4abc-8717-92c91f868437/error-c2059-syntax-error-type?forum=vclanguage