C通过‘的参数1;fread&x2019;从不带强制转换的整数生成指针
很抱歉打扰你,但我已经坚持太久了。 我在fread上得到了以下警告:“警告:传递'fread'的参数1将从整数生成指针,而不进行强制转换”C通过‘的参数1;fread&x2019;从不带强制转换的整数生成指针,c,C,很抱歉打扰你,但我已经坚持太久了。 我在fread上得到了以下警告:“警告:传递'fread'的参数1将从整数生成指针,而不进行强制转换” 我是C新手,非常喜欢它,但别忘了这一点。 提前谢谢 typedef unsigned char byte; int main( int argc, char *argv[]){ FILE * filein; filein = fopen(argv[1], "r" ); int width=10
我是C新手,非常喜欢它,但别忘了这一点。
提前谢谢
typedef unsigned char byte;
int main( int argc, char *argv[]){
FILE * filein;
filein = fopen(argv[1], "r" );
int width=10;
int height=10;
byte ** data;
// Allocation
data = (byte **) malloc(height*sizeof(byte *));
for(int i=0;i<height;i++){
data[i]=(byte *) malloc(width*sizeof(byte));
}
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
fread(data[i][j], sizeof(const char), 1, infile);
}
}
for(int i=0;i<height;i++){
free(data[i]);
}
free(data);
fclose(filein);
return 0;
exit(0);
}
typedef无符号字符字节;
int main(int argc,char*argv[]){
文件*filein;
filein=fopen(argv[1],“r”);
整数宽度=10;
整数高度=10;
字节**数据;
//分配
数据=(字节**)malloc(高度*尺寸(字节*);
对于(int i=0;i数据[i][j]的类型是字节。这不是指针。如果一次读取一个字节,您真正想要的是读取到&data[i][j]。fread()需要指向缓冲区的void*指针。您传递的是存储在数据[i][j]中的值,而不是指向元素数据[i][j]的指针
尝试使用
fread(&data[i][j], sizeof(const char), 1, infile);
顺便说一句,.pgm文件格式()有一个标题,仅读取宽度*高度字符是不够的。像素值也用空格分隔,因此需要进行一些分析。还要记住,行尾符号也占用空间(.pgm在一行上不能有超过70个字符)要读取单个字符,您可以执行以下操作
int c; // not char, because it must be able to hold EOF
c = getc(infile);
if( c == EOF ){
// do something about error or premature EOF
}
data[i][j] = c;
这更详细,主要是因为您的代码没有进行错误检查。非常感谢。这很有帮助。头解析和其他一切都很有效。为了减少混淆,我只发布了与问题相关的代码部分,但还是谢谢您。