如何从C语言中读取文件并将其保存为内存中的字符串,获取存储的字符串并将其切割成特定长度?关于 linux LF 格式
How do I read files from language C and save them as strings in memory, get the stored strings and cut them into a specific length? on linux LF format
我想把字符串当作一个数组来处理,把它切割成特定的长度,然后存储在一个二维数组中。例如,我有 20 行文本文件。像这样“input.txt”
www.google.com
www.naver.com
kbphonemall.com
kbplant.com
k-bplus.com
kbpointreestore.com
kbprint.com
kbprism.com
kbprivatebanking.com
kbpstore.com
kbr9rtudaf5ppy.com
kbrafting.com
kbraille.com
kbrainbank.com
kbrainbow.com
kbrainc.com
kbrainglocal.com
kbrandexpo.com
kbrandingschool.com
kbrandmall.com
然后,我阅读了这个文件并尝试使用 "\n 作为键在每一行上裁剪它。
例如,如果要一次剪切四行,则应先将其剪切为“kbplant.com”。截断后的字符串如下所示。
www.google.com\nwww.naver.com\nkbphonemall.com\nkbplant.com\n
然后它将存储在一个指针数组中。像这样
char *cutting[n];
cutting[0] = "www.google.com\nwww.naver.com\nkbphonemall.com\nkbplant.com\n"
cutting[1] = "k-bplus.com\nkbpointreestore.com\nkbprint.com\nkbprism.com\n"
.... more
至此,我要实现的功能说明就到此为止,我将向您展示代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define IPATH "input.txt"
int main(int argc, char *argv[]) {
char *ListBuffer;
int ListSize;
FILE *InputFile = fopen(IPATH, "r");
fseek(InputFile, 0, SEEK_END);
ListSize = ftell(InputFile);
ListBuffer = malloc(ListSize);
memset(ListBuffer, 0, ListSize);
fseek(InputFile, 0, SEEK_SET);
fread(ListBuffer, ListSize, 1, InputFile);
int count = 0;
ListBuffer[ListSize] = '[=14=]'; //add NULL word
for (int i = 0; i <= ListSize; i++) {
if (ListBuffer[i] == '\n') {
count++;
if (count == 4) {
printf("c%d\n", i);
count = 0;
}
}
if (ListBuffer[i] == 0) {
printf("c%d\n", i);
count = 0;
}
}
fclose(InputFile);
free(ListBuffer);
ListBuffer = NULL;
}
这是我的代码 我使用了strcpy
函数、strtok
函数、memcpy
函数等各种函数,但是很难实现想要的功能。有没有更好的方法或算法?
如果您需要更多解释,我会尽快回答。
如能回复,将不胜感激。祝你有个美好的一天。
不清楚你在主循环中试图实现什么,但还有更多问题:
您必须额外分配一个字节以在 ListSize
:
处设置空终止符
ListBuffer = malloc(ListSize + 1);
使用 memset
将数组设置为 0
是没有用的:使用 calloc(1, ListSize + 1)
进行分配会更有效,但是由于您阅读了数组中的内容,先清除它是没有用的。
fread
可能 return 短计数,例如在遗留系统的文本模式下,将 CR/LR 序列转换为换行字节 \n
减少读取的字节数:
ListSize = fread(ListBuffer, 1, ListSize, InputFile);
ListBuffer[ListSize] = '[=10=]'; // set the null terminator
我想把字符串当作一个数组来处理,把它切割成特定的长度,然后存储在一个二维数组中。例如,我有 20 行文本文件。像这样“input.txt”
www.google.com
www.naver.com
kbphonemall.com
kbplant.com
k-bplus.com
kbpointreestore.com
kbprint.com
kbprism.com
kbprivatebanking.com
kbpstore.com
kbr9rtudaf5ppy.com
kbrafting.com
kbraille.com
kbrainbank.com
kbrainbow.com
kbrainc.com
kbrainglocal.com
kbrandexpo.com
kbrandingschool.com
kbrandmall.com
然后,我阅读了这个文件并尝试使用 "\n 作为键在每一行上裁剪它。 例如,如果要一次剪切四行,则应先将其剪切为“kbplant.com”。截断后的字符串如下所示。
www.google.com\nwww.naver.com\nkbphonemall.com\nkbplant.com\n
然后它将存储在一个指针数组中。像这样
char *cutting[n];
cutting[0] = "www.google.com\nwww.naver.com\nkbphonemall.com\nkbplant.com\n"
cutting[1] = "k-bplus.com\nkbpointreestore.com\nkbprint.com\nkbprism.com\n"
.... more
至此,我要实现的功能说明就到此为止,我将向您展示代码。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define IPATH "input.txt"
int main(int argc, char *argv[]) {
char *ListBuffer;
int ListSize;
FILE *InputFile = fopen(IPATH, "r");
fseek(InputFile, 0, SEEK_END);
ListSize = ftell(InputFile);
ListBuffer = malloc(ListSize);
memset(ListBuffer, 0, ListSize);
fseek(InputFile, 0, SEEK_SET);
fread(ListBuffer, ListSize, 1, InputFile);
int count = 0;
ListBuffer[ListSize] = '[=14=]'; //add NULL word
for (int i = 0; i <= ListSize; i++) {
if (ListBuffer[i] == '\n') {
count++;
if (count == 4) {
printf("c%d\n", i);
count = 0;
}
}
if (ListBuffer[i] == 0) {
printf("c%d\n", i);
count = 0;
}
}
fclose(InputFile);
free(ListBuffer);
ListBuffer = NULL;
}
这是我的代码 我使用了strcpy
函数、strtok
函数、memcpy
函数等各种函数,但是很难实现想要的功能。有没有更好的方法或算法?
如果您需要更多解释,我会尽快回答。
如能回复,将不胜感激。祝你有个美好的一天。
不清楚你在主循环中试图实现什么,但还有更多问题:
您必须额外分配一个字节以在
处设置空终止符ListSize
:ListBuffer = malloc(ListSize + 1);
使用
memset
将数组设置为0
是没有用的:使用calloc(1, ListSize + 1)
进行分配会更有效,但是由于您阅读了数组中的内容,先清除它是没有用的。fread
可能 return 短计数,例如在遗留系统的文本模式下,将 CR/LR 序列转换为换行字节\n
减少读取的字节数:ListSize = fread(ListBuffer, 1, ListSize, InputFile); ListBuffer[ListSize] = '[=10=]'; // set the null terminator