为了确定文件类型,我必须拆分命令行参数。为了做到这一点,我正在使用
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变量。为什么?
发布于 2011-02-21 17:10:04
关于
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()
可以返回一个指向新字符串的指针,并且fileName
被声明为char *
,那么您以前存储在其中的任何内容都将不再有意义。在这种情况下,fileName
需要是char **
(指向字符串的指针),这是我在第一个注释中提出的。
发布于 2011-02-21 16:55:29
您需要在使用strcpy
的同时使用char
数组。
如下所示:
#define MAX_FILENAME_SIZE 200
char fileName[MAX_FILENAME_SIZE];
int f()
{
fileType = strtok(inputFule, ".");
// then use strcpy
strcpy(fileName, fileType);
}
char
全局只能存储一个字符。
https://stackoverflow.com/questions/5068767
复制相似问题