char *file1charbuf=(char*)malloc(sizeof(char));
char *file2charbuf=(char*)malloc(sizeof(char));
Run Code Online (Sandbox Code Playgroud)
在循环直到EOF我读焦炭引入*file1charbuf和*file2charbuf,然后比较.
...
check=read(file1, file1charbuf, 1);
check2=read(file2, file2charbuf, 1);
if (*file1charbuf!=*file2charbuf){
printf("differ: char %i, line %i\n",charpos,linepos);
exit(1);
}
....
Run Code Online (Sandbox Code Playgroud)
比较工作正常,但我想将指针保持在堆栈中,而不是堆中.malloc也是C lib函数.
char *file1charbuf[1]; //1 element array of char
char *file2charbuf[1];
Run Code Online (Sandbox Code Playgroud)
与那个比较不起作用
...
if (file1charbuf[0]!=file2charbuf[0]){
printf("differ: char %i, line %i\n",charpos,linepos);
exit(1);
}
...
Run Code Online (Sandbox Code Playgroud)
和第二个问题.是否有必要close(file1),如果exit(1)发现了什么?
你正在展示的代码存在很多问题,我担心:
malloc()在C中强制转换返回值.sizeof (char) C总是1,所以像这样使用它是没有意义的.当你看起来意味着字符数组时,你正在声明指向字符的指针数组.
char *file1charbuf[1]; //1 element array of char
应该是
char file1charbuf[1]; /* 1-element array of char */,当然,只是
char file1charbuf; /* 1-character buffer. */
你正在read()使用1字节缓冲区,这是非常低效的.
memcmp().close()在调用之前最好调用所有打开的文件描述符exit().在大多数操作系统上,该过程的死亡将导致其所有资源被重新声明,但最好明确地这样做.如果文件I/O使用FILE*基于缓冲的调用,则不需要,因为它们exit()在所有环境中自动关闭.