我的功能有什么问题" openfile"

时间:2014-06-03 10:40:44

标签: c file fopen

void openfile(FILE *fichier,char *str){
    char path;



    path=(char*)malloc(sizeof(char));

    fichier = fopen(&path,"r");

    if (fichier)
        printf("fichier chargé avec succes \n");
    else
        printf("ERREUR");

}

我用这种方式调用函数:

openfile(fichier,cc);

和cc包含" C:\ Documents and Settings \ Oussema \ Mes documents \ test.txt"

它返回:" ERREUR"

3 个答案:

答案 0 :(得分:2)

这段代码没有任何意义。

  • 忽略参数str
  • path被分配了一个指向一个字符
  • 数组的指针
  • 忽略参数fichier。函数中分配了一个值。这不能用于返回值。
  • fopen的第一个参数是垃圾指针。

试试这个,看看为什么会有所不同。

void openfile(FILE **fichier, char *str)
{
    if (NULL == fichier) return;

    *fichier = fopen(str, "r");

    if (*fichier)
        printf("fichier chargé avec succes\n");
    else
        printf("ERREUR");
}

编辑:

我更愿意将值作为返回值返回。在这种情况下,它只不过是函数fopen本身的详细版本。

FILE* openfile(char *str)
{
    FILE *fichier

    fichier = fopen(str, "r");

    if (NULL != fichier)
        printf("fichier chargé avec succes\n");
    else
        printf("ERREUR");

    return fichier;
}

答案 1 :(得分:0)

尝试:

void openfile(FILE *fichier,char *str){

    fichier = fopen(str,"r");

    if (fichier)

除了路径是char,而不是指针和不必要的,如果openfile为void,它应该以非零退出值终止程序,而不是返回。在没有指定文件名的情况下发送消息对任何人都没有多大帮助。

答案 2 :(得分:0)

代码根本没有意义。你想做什么? 几个笔记......

void openfile(FILE *fichier,char *str){

str如果您不使用它的目的是什么?也许你的意思是用...打开文件的路径。

path=(char*)malloc(sizeof(char));
fichier = fopen(&path,"r");

你刚刚定义了路径并让他在内存中有一个字节(足够一个字符) - 没有意义 - 你应该在其中定义更多空间,因为它应该是一个字符串(fopen获取指针到字符串!!!)和C中的字符串是从字符和最后的NULL值构建的。指针path没有任何意义: 1.在使用malloc后它没有初始化,它只是一个垃圾值。 2.您将它用作指向fopen中字符串的指针,但它只有1个字节的大小,因此您只能在其中放入NULL而不能更多,因此这意味着 - 无法打开文件。

if (fichier)
    printf("fichier chargé avec succes \n");
else
    printf("ERREUR");

在这里,我建议你只是让函数返回一个void *,如果一切正常或者其他任何事情都会出错,那么它将返回NULL,这样你就可以更好地操作这个函数了它不会在未经您许可的情况下在屏幕上打印内容:P