我必须拆分命令行参数以确定文件类型。为了做到这一点,我正在使用
char fileName; //global variable, just below function prototypes
char *fileType;
fileType= strtok(inputFile, "."); //first string split
fileName= (int) &fileType; //store the file name for further use
fileType= strtok(NULL, "."); //get the file type
令牌化器功能正在运行,但为了将冗余代码保持在最低限度,我想存储文件名,因为我必须创建一个具有相同名称的新文件,但稍后会有不同的扩展名。
在调试器中,永远不会使用fileName变量。为什么呢?
答案 0 :(得分:1)
关于
char fileName; //global variable, just below function prototypes
如果fileName
应该是一个字符串,那么它必须是指向该字符串中第一个char
的指针(即char *fileName
)。
如果fileName
被认为是指向字符串的指针,那么它应该被声明为char **fileName
。
关于
char *fileType;
如果这是一个局部变量,fileName
是指向它的指针,那么在函数返回后它将被销毁,指针将指向未知数据。
关于
fileName= (int) &fileType; //store the file name for further use
这对我来说似乎毫无意义。为什么要将fileType
的地址转换为整数?我想编译器抱怨,因为fileName
是char
而不是char *
,你注意到这会修复错误。如果不了解你正在做的事情,不要做这种修复,因为这样的编程只会产生深奥的代码,而这些代码可能无论如何都不会按预期工作。
因此,如果将fileName
定义为char *
,那么只需执行fileName = fileType
。否则,如果fileName
被声明为char **
,则执行fileName = &fileType
;
关于
fileType= strtok(NULL, "."); //get the file type
如果strtok()
可以返回指向 new 字符串的指针,并且fileName
被声明为char *
,那么之前存储在其中的任何内容都不会再有意义了。在这种情况下,fileName
需要是我在第一条评论中提出的char **
(指向字符串的指针)。
答案 1 :(得分:0)
您需要使用char
数组和strcpy
。
像这样:
#define MAX_FILENAME_SIZE 200
char fileName[MAX_FILENAME_SIZE];
int f()
{
fileType = strtok(inputFule, ".");
// then use strcpy
strcpy(fileName, fileType);
}
char
全局只会存储一个字符。