c - 如何将以下 C 代码提取到函数中?
问题描述
我正在尝试将一些 c 代码移动到单独的函数中。程序计算文件中行的长度。
#include <stdio.h>
int main()
{
const int max = 255;
int counter = 0;
FILE *f1 = fopen("maps/map1.txt", "r");
char buff[max];
while (fgets(buff, sizeof (buff), f1))
{
counter++;
}
printf("%d\n", sizeof (buff)); // 255
printf("%d\n", counter); // 23
fclose(f1);
return 0;
}
计数器指示 23,这是正确的结果,buff 变量的大小为 255,如声明的那样。
这些简单的实现被移到一个单独的函数 getLineWidth() 中。不幸的是,我无法得到正确的结果。
#include <stdio.h>
int getLineWidth(char * buffer, FILE * file);
int main()
{
const int max = 255;
int counter = 0;
FILE *f1 = fopen("maps/map1.txt", "r");
char buff[max];
printf("%d\n", getLineWidth(buff, f1)); // 299
fclose(f1);
return 0;
}
int getLineWidth(char * buffer, FILE * file){
int counter = 0;
printf("%d\n", sizeof (buffer)); // 4
while (fgets(buffer, sizeof (buffer), file))
{
counter++;
}
return counter;
}
缓冲区变量的大小为4,这可能表示char的大小,而不是传递给函数的数组buff的大小。函数也返回了错误的结果——299。
请帮助我处理这部分代码,并告诉我我在哪里犯了错误。
解决方案
推荐阅读
- flutter - 如何使 SliverAppBar 的边缘透明?
- php - 通过 Chrome 扩展从数据库中获取/获取信息
- c# - 在服务堆栈框架中的多个请求之间保存会话/状态数据
- azure-devops - 为什么 azure arm 模板既需要位置又需要“位置名称”?
- c# - 无法使用 ODBC 连接到数据库
- node.js - Google Cloud Storage 上传图片的良好做法
- python - 简单循环的问题
- c# - unity c# json 字符串到 2020 年列表/字典
- java - 有什么方法可以找出为什么会出现以下索引错误?
- vb.net - 将图片框图像导出到本地磁盘