我的文件名遇到了麻烦。我刚刚开始使用程序参数,而且我已经坚持转换。
我正在编写一个带有这样的参数的程序:./sum filename
从filename.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
。有什么方法可以使它发挥作用吗?
答案 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;
}
/***************************************************************************/
非常感谢你们的帮助:)