linkedList *createFreqTable(char *file) {
int i = 0;
int k = 0;
int fCount = 0;
int sizeLimit = 128;
struct tnode *nodes = malloc(128 * sizeof(struct tnode));
char *character;
/* Open a file stream */
FILE *stream;
/* Reads in the file */
stream = fopen(file, "r");
/* Scan the file until EOF */
while (fscanf(file, "%c", &character) != EOF) {
...
收到警告信息passing argument 1 of 'fscanf' from incompatible pointer type.
有关代码错误的任何线索吗?
答案 0 :(得分:1)
%c
转换说明符需要char *
类型的参数。您已将变量character
声明为类型char *
。因此,&character
调用中的表达式 scanf
的类型为char **
。
将character
声明为常规char
,而不是char *
:
char character;
...
while(fscanf(stream, "%c", &character) == 1) {
请注意,您不希望将character
作为指针,只需将&
放入scanf
来电,因为{{1}在这一点上,没有指向任何有意义的东西。
修改强>
chqrlie指出了我第一次错过的其他一些错误 - 你应该将character
而不是stream
作为file
的第一个参数传递,你应该比较结果为fscanf
而不是1
(因为您正在扫描单个项目)。
答案 1 :(得分:1)
编译器抱怨,因为您将file
而不是stream
传递给fscanf
。您还应该传递格式char
的{{1}}地址,而不是%c
的地址。将char*
的定义更改为character
。
为了获得更好的性能,使用char character;
代替fgetc()
一次一个字节地读取文件会更有效。
然后,您可以将fscanf()
定义为character
:
int