【发布时间】:2013-06-22 13:59:25
【问题描述】:
我在一个程序上添加了这段代码,据说是为了创建一个文本文件(当我添加标记为 //textfile 的程序底部时出现错误)
//here is a fragment of the program
void next_macroblock(Macroblock *currMB)
{
VideoParameters *p_Vid = currMB->p_Vid;
InputParameters *p_Inp = currMB->p_Inp;
Slice *currSlice = currMB->p_Slice;
int slice_type = currSlice->slice_type;
BitCounter *mbBits = &currMB->bits;
(some codes deleted)
// Statistics
cur_stats->quant[slice_type] += currMB->qp;
++cur_stats->num_macroblocks[slice_type];
//textfile
FILE * pFile;
pFile = fopen ("mytable.txt","w");
fprintf (pFile, " \t %d \t | \n",mbBits->mb_total);
fclose (pFile);
}
错误:
**c:\jm 18.4\lencod\src\macroblock.c(223): error C2275: 'FILE' : illegal use of this type as an expression**
**c:\program files\microsoft visual studio 11.0\vc\include\stdio.h(66) : see declaration of 'FILE'**
c:\jm 18.4\lencod\src\macroblock.c(223): error C2065: 'pFile' : undeclared identifier
c:\jm 18.4\lencod\src\macroblock.c(224): error C2065: 'pFile' : undeclared identifier
c:\jm 18.4\lencod\src\macroblock.c(224): warning C4047: '=' : 'int' differs in levels of indirection from 'FILE *'
c:\jm 18.4\lencod\src\macroblock.c(225): error C2065: 'pFile' : undeclared identifier
c:\jm 18.4\lencod\src\macroblock.c(225): warning C4047: 'function' : 'FILE *' differs in levels of indirection from 'int'
c:\jm 18.4\lencod\src\macroblock.c(225): warning C4024: 'fprintf' : different types for formal and actual parameter 1
c:\jm 18.4\lencod\src\macroblock.c(226): error C2065: 'pFile' : undeclared identifier
c:\jm 18.4\lencod\src\macroblock.c(226): warning C4047: 'function' : 'FILE *' differs in levels of indirection from 'int'
c:\jm 18.4\lencod\src\macroblock.c(226): warning C4024: 'fclose' : different types for formal and actual parameter 1
问题来了: 我已经放置了#include(因为文件在stdio.h中定义)然后以Unicode格式保存(因为程序告诉我以Unicode格式保存它,否则会出现更多错误),通过转到FILE->提前保存选项->带有签名的UTF 8。关于“以Unicode格式保存文件的错误仍然存在,直到我删除了一些包含德语字符的cmets /* */。
关于 FILE 的错误仍然相同。出了什么问题?
根据@macduff 和@KeithThompson 的说法,我应该在我所做的那部分代码中包含 { }。错误消失了,但没有创建文本文件(我想做的是创建一个文本文件,用于打印代码中变量的值。)
新问题: 如果 Visual Studio 2012 遵循 C89/C90 标准并且我不能在函数或块的中间声明变量,那么创建文本文件以打印变量 mbBit->mb_total 的变化值的最佳方法是什么? (我应该将 { } 放在代码上以创建文本文件、创建新函数还是在头文件中声明我的参数 - 如果是,我必须声明哪些参数以及如何声明它们?)
【问题讨论】:
-
如果您询问有关错误消息的问题,为什么不包括实际错误消息?即使是一些语法正确的代码也会是一个不错的选择。
-
#in l 包括?
prile未定义?fprintf(pfile, "%d", number->var_inp? SSCCE,请。 -
我的电脑运行缓慢,这是我从我的代码中记得的 :) 抱歉。这是代码
-
之前
FILE. -
我认为如果你不能处理基本的C语法错误,用C写视频处理代码可能不是一个好计划。
标签: c unicode text-files