gpt4 book ai didi

c - 在 C 中使用字符指针的二维数组

转载 作者:行者123 更新时间:2023-12-04 05:15:23 25 4
gpt4 key购买 nike

我想读取一个文件并将每一行写入字符数组。由于我不知道行数,因此我认为最有效的方法是使用字符指针的二维数组。但是我得到了段错误。

我的问题可能与这个问题重复:
2D array of char pointers --> Segmentation fault?

但是我无法找出 C 的正确语法,所以我无法尝试。

这是我的代码:

   FILE *file = fopen ( filename, "r" );
if ( file != NULL )
{
char line [ 128 ]; /* or other suitable maximum line size */
char **new_line;
int i = 0;
while ( fgets ( line, sizeof line, file ) != NULL ) /* read a line */
{
strcpy(new_line[i], line);
i++;
}

最佳答案

没有为 new_line 分配内存这会导致段错误。

如果您知道行数,那么您可以将其声明为本地数组本身。在这种情况下,您的访问方法将正常工作。

#define MAX_LINES 20
#define MAX_CHARS 128
...
char new_line[MAX_LINES][MAX_CHARS] = {0};
...

您的问题是您不知道最大行数。所以你选择了双指针。在这种情况下,您需要先 malloc一些 n行数,然后您需要继续使用 realloc以增加缓冲区大小。
#define MAX_CHARS 128
#define N_NO_OF_LINES 10
...
char line[MAX_CHARS] = {0};
char **new_line = NULL;
int noOfLines = 0;
int lineCount = 0;

new_line = malloc(sizeof(char*) * N_NO_OF_LINES);
noOfLines = N_NO_OF_LINES;

while (fgets (line, sizeof line, file) != NULL) /* read a line */
{
if (lineCount >= noOfLines)
{
new_line = realloc(new_line, (sizeof(char*)*(noOfLines+N_NO_OF_LINES)));
noOfLines += N_NO_OF_LINES;
}

new_line[lineCount] = strdup(line);
lineCount++;
}

注意:注意 malloc 的空检查和 realloc

关于c - 在 C 中使用字符指针的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14349327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com