如何将文件的名称字符串更改为fopen可接受的格式

时间:2016-07-02 10:52:04

标签: c string filenames

我的文件名遇到了麻烦。我刚刚开始使用程序参数,而且我已经坚持转换。 我正在编写一个带有这样的参数的程序:./sum filenamefilename.txt开始,它需要数据并完成工作。我遇到的问题是如何将"filename.txt"的文件名更改为fopen才能接受?

#include <stdio.h>

char *wrap_fname ( const char * );

int main( int argc, char* argv[] ){
    FILE *filePtr = NULL;

    printf("\n%s\n", wrap_fname(argv[1]));
    getchar();
}

char *wrap_fname ( const char *name ){
    char *wrapped_name = NULL;
    int iterator;

    *wrapped_name = '"';
    for( iterator = 0 ; iterator < strlen(*name) ; iterator ++ ){
    wrapped_name[iterator+1] = name[iterator];
    }

    wrapped_name[strlen(wrapped_name)] = ".txt\"";

    return wrapped_name;
}

我已经做过类似的事了,但我知道这只是一个绝望的错误尝试。任何帮助都会受到赞赏,因为我找不到任何好的功能。

- 编辑 - 我终于让函数工作了,现在我的代码看起来像这样:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void wrap_fname ( char * , char **);

/***************************************************************************/

int main( int argc, char* argv[] ){
    FILE *filePtr = NULL;
    char *filename = malloc(sizeof(argv[1])+6*sizeof(char));

    wrap_fname(argv[1],&filename);

    if( (filePtr = fopen(filename,"r")) == NULL ){
    perror("Error opening file...");
    exit(3);
    }
    printf("File %s succesfully opened",filename);

    getchar();
    free(filename);
    return 0;
}

/***************************************************************************/

void wrap_fname ( char *name , char **dest){
    char *wrapped_name = malloc(sizeof(name)+6*sizeof(char));

    strcat(wrapped_name,"\"");
    strcat(wrapped_name,name);
    strcat(wrapped_name,".txt\"");
    strcpy(*dest,wrapped_name);

    free(wrapped_name);
}

现在我遇到了一个更大的问题,我完全不知道如何应对。在我使用./sum data运行后(在我的文件夹中创建此文件后),它将名称正确转换为"data.txt",但fopen没有打开它,我得到{{1} } perror。有什么方法可以使它发挥作用吗?

1 个答案:

答案 0 :(得分:1)

我更正了包装功能,所以现在它不添加引号,它就像一个魅力:)感谢关于sizeof(argv[1])的评论,我真的没想过。无论如何这里是这个程序的工作代码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

void wrap_fname ( char * , char ** );
FILE *open_file ( char * );

/***************************************************************************/

int main( int argc, char* argv[] ){
    FILE *filePtr = NULL;
    char *filename = malloc(strlen(argv[1])*sizeof(char)+6*sizeof(char));

    wrap_fname(argv[1],&filename);

    filePtr = open_file(filename);
    printf("File %s succesfully opened",filename);

    getchar();
    fclose(filePtr);
    free(filename);
    return 0;
}

/***************************************************************************/

void wrap_fname ( char *name , char **dest){
    char *wrapped_name = malloc(strlen(name)*sizeof(char)+6*sizeof(char));

    strcat(wrapped_name,name);
    strcat(wrapped_name,".txt");
    strcpy(*dest,wrapped_name);

    free(wrapped_name);
}

/***************************************************************************/

FILE *open_file( char *path ){
    FILE *tmp_ptr = NULL;

    if( !access(path, F_OK ) ){
    if ( !(tmp_ptr = fopen (path, "r")))
    {
        perror ("Error opening file...");
        exit (1);
    } else return tmp_ptr;
    } else {
    perror("File doesnt exist...");
    exit(3);
    }
    return NULL;
}

/***************************************************************************/

非常感谢你们的帮助:)