gpt4 book ai didi

c - 在 Xcode c 中使用文件的问题

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

当我使用导入到 Xcode 的文件运行此程序时,我在 c = fgetc(ptr );。我不确定为什么 fptr 到达此行时为空。任何帮助都会非常感谢。

#include <stdio.h>
#define M 100
#define N 100
char array[M][N] = {0};
void readFile();
void findStartandEnd();
void mazeTraversal();
int m = 0;
int n = 0;
int start[2] = {0};
int end[2] = {0};

int main() {
readFile();
//findStartandEnd();
//mazeTraversal();
}

void readFile() {
FILE *fptr;
char c;
char file_name[20];
int i, j;

printf("Please enter the size of the MxN maze.\n");
printf("Start with the M size then the N size follow each number by the return key.\n");
scanf("%d", &m);
scanf("%d", &n);
printf("Type in the name of the file containing the Field\n");
scanf("%s", file_name);
fptr = fopen(file_name, "r");
for (i = 0; i < M && i < m; i++)
for (j = 0; j < N && j < n; j++) {
c = fgetc(fptr);
while (!((c == '1') || (c =='0')))
c = fgetc(fptr);
array[i][j] = c;
}
fclose(fptr);

for (i = 0; i < M && i < m; i++)
for (j = 0; j < N && j < n; j++) {
if (j == 0) printf("\n");
printf("%c ", array[i][j]);
}
printf("\n");
}

最佳答案

你不测试是否scanf将字符串正确解析为 file_name .你甚至不保护file_name来自 scanf("%19s", file_name); 的潜在缓冲区溢出

此外,你不测试是否fopen文件打开成功。 fptr可能是 NULL由于许多可能的原因,您必须对其进行测试并优雅地失败。

请注意 scanf将在第一个单词后的第一个空白字符处停止。无法使用此方法输入带有嵌入空格的文件名。

另请注意 c应定义为 int而不是 char正确测试文件结尾为 EOFfgetc() 返回不适合 char .

您还应该在 for 推荐的非平凡语句周围使用大括号循环。它们不是绝对必要的,但它会在以后修改代码时避免愚蠢的错误。

关于c - 在 Xcode c 中使用文件的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35387336/

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