数组中的C文件读取器

数组中的C文件读取器,c,C,我可以看到y的最后一个printf输出,但fpc变为null 我怀疑fopen函数中有双引号,但没有找到解决方案:如何修复它 守则的一部分 当我运行代码时 Error opening file. TEST /Users/lessons/AbstractLesson.java 这是完整的代码 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #

我可以看到y的最后一个printf输出,但fpc变为null

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

守则的一部分

当我运行代码时

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;
}我怀疑路径/Users/lessons/AbstractLesson.java是错误的。它看起来像OSX路径,用户和课程之间可能缺少用户名。

将printfTEST%s\n,y更改为printfTEST\%s\\n,y,这样我们可以查看文件名中是否有多余的空白字符

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

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


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

是否存在/Users/lessons/AbstractLesson.java?可读吗?您确认文件/Users/lessons/AbstractLesson.java存在吗?您是否有读取权限?请在您的问题中包括ls-la/Users/lessons/AbstractLesson.java的确切输出。arr_行的定义是什么?您如何设置?您可以检查错误号以了解更多有关实际错误的信息问题:@Scott:我不明白你最后的评论。出于保密原因,我故意减少了输出。。不要在意路径,它正确无误reality@Scott:哦,你展示了实际发生的情况的近似值。鉴于问题的性质,我认为这不是一个好办法。我在对问题的评论中提出了一些建议。祝你好运。@Scott:为什么我很难相信你说的路是正确的?对于初学者来说,fopen经过了很好的测试,并且可以正常工作。其次,有许多评论要求您提供有关该文件的更多详细信息,但您尚未回复。唯一的另一种选择是,您的文件名中有虚假字符,但您没有提供足够的信息供任何人确定。@Scott:确保y没有尾随的换行符。打开文件时出错。TEST/Users/Paz/Downloads/Web//WEBINF/classes/org/TEST/webx/lessons/AbstractLesson.java输出与printfest\%s\\n相同,这是Windows吗?是否调用GetLastError或erno来确定原因?然后是路径不正确,或者文件无法读取。原因是换行符。谢谢你们,我修好了。
#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;