gpt4 book ai didi

c - 处理二维指针时如何正确分配以及使用二维指针数组有哪些优点?

转载 作者:行者123 更新时间:2023-11-30 15:36:03 27 4
gpt4 key购买 nike

我目前正在解决迷宫问题,到目前为止,我已经从文本文件中读取了迷宫并将其存储到一维指针中,但是,我正在尝试将其存储到二维指针数组中,但我一直遇到段错误。另外,我的第二个问题是,使用二维指针数组有哪些优点?我似乎不明白如何正确实现它们。这是我第一次使用二维指针,所以我不太擅长它,但是我想改进,以便将来能够擅长它。非常感谢您提前提供的帮助:)

这是我到目前为止所做的:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mazegen.h"
#define BUFFERSIZE 500

int main(int argc, char**argv)
{
char*readFile;
char**storeMaze;
FILE*fp;
int i;
i=0;
readFile = malloc(sizeof(char)*(BUFFERSIZE)+1);

if(argc != 2)
{
printf("Error opening file, incorrect format. <programNam <inputfileName>\n");
exit(0);
}
else
{
fp = fopen(argv[1], "r");

if(fp == NULL)
{
printf("Empty File. Error. Exiting Program.\n");
exit(0);
}

while(fgets(readFile,sizeof(readFile),fp) != NULL)
{
storeMaze = malloc(sizeof(char*)*(strlen(readFile)+1));
strcpy(storeMaze[i], readFile);
}
}

free(readFile);
fclose(fp);
return 0;

}

最佳答案

您已动态分配空间供 fgets() 读取,但您随后传递了错误的大小作为大小。没有理由使用 malloc() ,除非您使用的是一台异常小的机器(例如主内存小于 8 MiB — 是的,我的意思是兆字节)。

char readLine[4096];

while (fgets(readLine, sizeof(readLine), inputFile) != NULL)

或者,如果您坚持使用 malloc(),请在调用 fgets() 时指定 101 作为大小。

您正在 32 位系统上进行编译,因此 sizeof(inputFile) == sizeof(FILE *) 在您的系统上为 4。因此,每次调用 fgets() 时,您都会从输入中获得最多三个字符和一个 null。

关于c - 处理二维指针时如何正确分配以及使用二维指针数组有哪些优点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22701783/

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