我有错误:
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;
}
答案 0 :(得分:3)
line[n++] = char(c);
是语法错误。我猜你想要演员:
line[n++] = (char)c;
NB。此投射实际上没有效果,因为int
可以隐式转换为char
,无论如何都会发生这种情况,因为line[n++]
的类型为char
。
在文件未以换行符结尾的情况下,检查循环中的EOF
和\n
也是明智之举。
另外:=
的优先级较低,因此行while(c=fgetc(file)!='\n')
会将c
设置为1
或0
。一些括号需要修复。
答案 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
在这里