c-将txt导入2d数组



我得到了一个txt文件,如下所示:

T,G,F,F
G,T,T,F
G,T,F,G
T,F,G,T

二聚体=4

我想把它导入数组,作为动态分配字符,比如:[T,G,F,F,G,T,T,F,G,T,F,G,T,F,G,T]

我试了一遍代码,但还是出错了。

void file_2_arr(FILE *file,char *forest_current,int dimen)
{
int i = 0;
char *buffer = NULL;
buffer =(char*)malloc(sizeof(char) * (2*dimen-1));
const char* delim = ",";
while (!feof(file))
{
fgets(buffer, sizeof buffer, file);
char* token = strtok(buffer, delim);
while (token != NULL)
{
printf("%s", token);
strcpy(forest_current, token);
token = strtok(NULL, delim);
forest_current++;
}
}
free(buffer);
return;

您的函数太复杂了。您正在调用5个函数,而实际上只需要调用一个。

你正在做:

fgets(buffer, sizeof buffer, file);

但是,sizeof将返回指针的大小,而不是您分配的长度。您想要:

fgets(buffer, 2 * dimen - 1, file);

但是,2 * dimen - 1太短了。它不考虑行末尾的换行符[或EOS字符]。因此,对于fgetsmalloc,都需要将其更改为2 * dimen + 2

另外,不要使用feof。只需检查fgets的返回值

您正在使用strtok一次去掉单个字符。这是非常缓慢的。

注意,根据定义,sizeof(char)总是1。所以,消除它。

不清楚是否希望输出缓冲区末端有EOS字符。但是,你得到了一个。

此外,没有显示调用函数的代码,那么如何确保调用者的缓冲区中有足够的空间呢?

您实际上并没有指定您实际遇到的错误,因此很难确保以上内容解决您的问题。

而且,没有必要铸造malloc的回归。请参阅:我是否投射malloc的结果?


如果一次读取一个字符,则不需要使用malloc或单独的缓冲区。或者,任何其他功能。

#include <stdio.h>
void
file_2_arr(FILE *file, char *forest_current, int dimen)
{
while (1) {
int chr = fgetc(file);
if (chr == EOF)
break;
switch (chr) {
case ',':
case 'n':
break;
default:
*forest_current++ = chr;
break;
}
}
#if 0
*forest_current = 0;
#endif
}

相关内容

  • 没有找到相关文章

最新更新