gpt4 book ai didi

数组中的 C 文件读取器

转载 作者:行者123 更新时间:2023-11-30 21:02:52 24 4
gpt4 key购买 nike

我可以看到 y 最后的 printf 输出,但 fpc 变为空。

我怀疑 fopen 函数中存在双引号,但找不到解决方案:如何修复它?

部分代码;

char *y = &arr_lines[1024*2];

FILE *fpc = fopen(y, "r");

if (fpc == NULL) {
printf("Error opening file.\n");
//return -1;
}
printf("TEST %s\n",y);

当我运行代码时;

Error opening file.
TEST /Users/lessons/AbstractLesson.java

这是完整的代码;

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#define LINESIZE 1024
int main(void){

char *arr_lines, *line;
char buf_line[LINESIZE];
int num_lines = 0;
char buf[10240];

// open file
FILE *fp = fopen("/tmp/file", "r");
//FILE *fp1 = fopen(arr_lines, "r");
if (fp == NULL) {
printf("Error opening file.\n");
return -1;
}
// get number of lines; from http://stackoverflow.com/a/3837983
while (fgets(buf_line, LINESIZE, fp))
if (!(strlen(buf_line) == LINESIZE-1 && buf_line[LINESIZE-2] != '\n'))
num_lines++;
// allocate memory
arr_lines = (char*)malloc(num_lines * 1024 * sizeof(char));
// read lines
rewind(fp);
num_lines = 0;
line=arr_lines;
while (fgets(line, LINESIZE, fp))
if (!(strlen(line) == LINESIZE-1 && line[LINESIZE-2] != '\n'))
line += LINESIZE;
// print first four lines
char *y = &arr_lines[1024*2];

FILE *fpc = fopen(y, "r");
//FILE *fp1 = fopen(arr_lines, "r");
if (fpc == NULL) {
printf("Error opening file.\n");
//return -1;
}

printf("TEST [%s]\n",y);
//x = &arr_lines[1024*0];
// y = *x;

// finish
fclose(fp);
return 0;

}

最佳答案

printf("TEST %s\n", y) 更改为 printf("TEST\"%s\"\n", y) 这样我们就可以查看文件名中是否有多余的空格字符。

fgets() 返回新行(如果存在)。我没有看到你的代码在哪里清除换行符。您的路径字符串是否包含新行?

除此之外,fopen() 几乎可以肯定工作正常。唯一的选项是 1) 路径不正确,2) 路径包含空格或其他无效字符,或 3) 文件不可读取。

如果您的路径中没有新行,则说明您没有提供足够的信息来解决此问题。

关于数组中的 C 文件读取器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27662205/

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