我可以看到printf
的最后y
输出,但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;
}
答案 0 :(得分:1)
将printf("TEST %s\n", y)
更改为printf("TEST \"%s\"\n", y)
,以便我们查看文件名中是否有任何额外的空白字符。
fgets()
会返回新行,如果有的话。我没看到你的代码清除换行符的位置。您的路径字符串是否包含新行?
除此之外,fopen()
几乎肯定能正常工作。唯一的选择是1)路径不正确,2)路径有空格或其他无效字符,或3)文件无法读取。
如果您的路径中没有新行,那么您根本无法提供足够的信息来解决此问题。
答案 1 :(得分:0)
我怀疑路径/Users/lessons/AbstractLesson.java
是错误的。它看起来像一个OSX路径,它可能缺少Users
和lessons
之间的用户名。