繁体   English   中英

在不知道行长的情况下将行从stdin读入C中的2d数组

[英]Reading lines from stdin into 2d array in C without knowing length of lines

我想从标准输入中读取具有可变长度的行,直到输入结束。 输入示例如下所示:

#.###############
#...#...........#
#.###.#####.#.###
#...........#...#
###############.#

但具有各种长度的行和列。

除了将其读取为char以外,将其读取到2d数组中的最佳方法是什么?

假设您正在POSIX兼容的系统上运行,则可以使用getline()函数读取几乎任意长度的行(仅受可用内存限制)。 这样的事情应该起作用:

char *line = NULL;
size_t bytes = 0UL;

for ( int ii = 0;; ii++ )
{
    ssize_t bytesRead = getline( &line, &bytes, stdin );
    if ( bytesRead <= 0L )
    {
        break;
    }

    lineArray[ ii ] = strdup( line );
}

free( line );

您将必须添加错误检查并亲自处理lineArray

char *buff = malloc(1024 * 100); // 100K should be plenty, tweak as desired.
char *maze = 0;
int width = 0, 
int height = 0;    

FILE *fp = fopen(input.txt, "r");
fgets(buff, 1024 * 100, fp);
if(!strchr(buff, '\n'))
   goto failed_sanity_test;
striptrailingwhitespace(buff);
if(height == 0)
   width = strlen(buff);
/* sanity-test width ? */
else
   if(strlen(buff) != width)
       goto ragged_edge_maze;
temp = realloc(maze, width * (height + 1));
if(!temp) 
  goto out_of_memory;
maze = temp;
memcpy(maze + height * width, buff, width);
height++;

与许多其他语言相比,它在C语言中比较好玩,但至少您可以完全控制错误条件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM