关于从 C 中的文本文件中读取 char 数组的任何建议?
Any advice for reading in char arrays from text files in C?
这是我 运行 关注的问题。
我正在从文件中读入文本行,但只尝试读入非连续重复的行。
这是我阅读文本行的常规代码。
while (((ch = getc (fp)) != EOF))
{
a[j++] = ch;
}
a[j] = '[=10=]';
效果很好。
在试图弄清楚如何解决这个问题时,我尝试使用一个 char 数组一次读取一行,然后使用 strcomp 将其与上一行进行比较。如果匹配,则不会将该行添加到最终的 char 数组中。它看起来像这样:
while (((ch = getc (fp)) != EOF))
{
if (ch != '\n')
{
copynumber++;
temp[j] = ch;
}
else
{
uni = strcmp(identical, final);
if (uni == 0) {
copynumber = 0;
}
else
{
strncpy(identical, temp, copynumber);
final[j] = ch;
}
j++;
}
}
final[j] = '[=11=]';
但我知道出于某些原因这不会奏效。第一,我从不将以前的字符添加到最终数组中。我真的迷路了。任何帮助表示赞赏。谢谢。
stdio.h
中有一个 getline()
函数,您可以使用它来获取文件中的每一行。
要跳过重复项,您可以存储前一行读取并在每一步进行比较。
FILE *fp;
char *line = NULL;
char *prev_line[999];
char final[999];
size_t len = 0;
ssize_t read;
fp = fopen("file", "r");
while ((read = getline(&line, &len, fp)) != -1) { // Read each line
if (strncmp(line, prev_line, read) != 0) { // If not equal
strncat(final, line, read); // Copy to final
strncpy(prev_line, line, read); // Update previous
}
}
free(line); // Need to free line since it was null when passed to getline()
这是我 运行 关注的问题。
我正在从文件中读入文本行,但只尝试读入非连续重复的行。
这是我阅读文本行的常规代码。
while (((ch = getc (fp)) != EOF))
{
a[j++] = ch;
}
a[j] = '[=10=]';
效果很好。
在试图弄清楚如何解决这个问题时,我尝试使用一个 char 数组一次读取一行,然后使用 strcomp 将其与上一行进行比较。如果匹配,则不会将该行添加到最终的 char 数组中。它看起来像这样:
while (((ch = getc (fp)) != EOF))
{
if (ch != '\n')
{
copynumber++;
temp[j] = ch;
}
else
{
uni = strcmp(identical, final);
if (uni == 0) {
copynumber = 0;
}
else
{
strncpy(identical, temp, copynumber);
final[j] = ch;
}
j++;
}
}
final[j] = '[=11=]';
但我知道出于某些原因这不会奏效。第一,我从不将以前的字符添加到最终数组中。我真的迷路了。任何帮助表示赞赏。谢谢。
stdio.h
中有一个 getline()
函数,您可以使用它来获取文件中的每一行。
要跳过重复项,您可以存储前一行读取并在每一步进行比较。
FILE *fp;
char *line = NULL;
char *prev_line[999];
char final[999];
size_t len = 0;
ssize_t read;
fp = fopen("file", "r");
while ((read = getline(&line, &len, fp)) != -1) { // Read each line
if (strncmp(line, prev_line, read) != 0) { // If not equal
strncat(final, line, read); // Copy to final
strncpy(prev_line, line, read); // Update previous
}
}
free(line); // Need to free line since it was null when passed to getline()