将char数组作为参数传递给fopen

时间:2015-12-12 19:56:30

标签: c

我正在尝试打开一个文件(在ubuntu上),其路径位于变量path中。但是当我尝试将路径传递给fopen()时,它无法找到该文件。 这是一段代码

char path="./client.c";
FILE *fp;
if((fp=fopen(path,"r"))==NULL)
printf("file could not be opened\n");

尽管如此,如果我直接通过该路径它可以正常工作。以下代码工作正常。

FILE *fp;
if((fp=fopen("./client.c","r"))==NULL)
printf("file could not be opened\n");

我做错了什么?我该如何解决?

3 个答案:

答案 0 :(得分:2)

您没有在

中声明数组大小
char path="./client.c";

将其更改为:

char path[]="./client.c";

现在您的代码应该按照需要运行。

如果您对使用指针感兴趣,请使用

const char* path="./client.c";  

直接指向字符串

答案 1 :(得分:1)

替换

char path="./client.c";

const char* path="./client.c"; 
//^no array, just point to the string literal

如果您不需要修改路径。

如果你这样做,那么:

char path[]="./client.c";
//^create a modifiable array from the string literal
char path="./client.c";

编译因为字符串文字自动转换为字符串文字的地址 (它们被放置在可执行文件的静态,通常是只读的段中),这是一个整数,可以在丢失时分配给char。

但是,您应该从编译器中得到关于此的警告。

在没有任何警告的情况下进行编译。

答案 2 :(得分:0)

只需替换

char path="./client.c";

char path[]="./client.c";