c - 将文件读入数组并跳过换行符
问题描述
嘿伙计们,我正在寻找一个包含多个换行符的文件并将文件内容传输到一个数组中。例如:
文件:
I want to
Make This
File Into
An Array
并且该文件将作为(伪代码)插入到数组中:
array [] = iwanttomakethisfileintoanarray
我知道如何跳过空格和更改大小写,我一直在使用 fscanf 扫描文件并将字符输入到数组中。
我的问题是
while(fscanf(f, "%s", array) != EOF)
到达换行符时中断。我已经四处寻找解决方案,但现在一无所获。任何帮助表示赞赏。
解决方案
切勿使用"%s"
没有 a的转换说明符width
来限制写入目标的字符数。例如。"%99s"
将 99 个字符读入 100 个数组。
scanf()
使用只是为了摆脱空格逐字读取文件只会使事情变得复杂,因为tolower()
无论如何您都必须对每个单词的每个字符进行处理。首先最好逐个字符地读取文件:
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctype.h>
enum { BUFFER_GROWTH = 4 };
int main(void)
{
char const *filename = "test.txt";
FILE *input = fopen(filename, "r");
if (!input) {
fprintf(stderr, "Couldn't open \"%s\" for reading :(\n\n", filename);
return EXIT_FAILURE;
}
size_t length = 0;
size_t size = 1;
char *buffer = malloc(size * sizeof *buffer);
for (int ch; (ch = fgetc(input)) != EOF;) {
if (!isprint((char unsigned) ch) || isspace((char unsigned) ch))
continue;
if (length + 1 >= size) {
char *tmp = realloc(buffer, (size *= BUFFER_GROWTH) * sizeof *buffer);
if (!tmp) {
free(buffer);
fclose(input);
fputs("Not enough memory :(", stderr);
return EXIT_FAILURE;
}
buffer = tmp;
}
buffer[length++] = tolower((char unsigned) ch);
}
buffer[length] = '\0';
puts(buffer);
free(buffer);
fclose(input);
}
推荐阅读
- python - 如何生成唯一(!)均匀分布的随机数组/列表/序列
- c# - 类似于 RunWorkerCompleted 的 await/async 回调主线程
- android - android中的工具栏,折叠工具栏,应用栏,底部导航栏和操作栏有什么区别?
- php - 如何使用辅助类 WC_Product_Variation 正确创建 WooCommerce 变体
- r - acf() 函数绘制非常大的滞后
- docker - GKE 无法从 GCR 中提取图像
- php - CORS 问题 Angular + PHP REST API
- python - 必须调用 ray.init() 两次:第一次给出“AUTH
在没有为默认用户配置任何密码的情况下调用。” - sql - GitLab 管道错误:包 'mysql-client' 没有安装候选。我能做些什么?
- excel - 使用 vba 打开/保存 excel 文件时隐藏标准进度条