2013-10-27 29 views
0

我有一个保存功能,我需要我的程序来识别文件扩展名并将其与文件扩展名分开。我已阅读 Extracting the extension of a file 但我的另存为功能不是主要的,所以我不能有argv [1]。这里是我完整的代码至今:C中的文件扩展名为用户输入

#include <stdio.h> 
#include <errno.h> 

void save_as() 
{ 
    // user enters their desired name for the file 
    char filename; 
    char fileext; 
    printf("Filename:\t"); 
    scanf("%s", &filename); 
    filename = strtok(filename, "."); // according to the link I mentioned above this should have been: filename = strtok(argv[1], "."); 
    fileext = strtok(NULL, "."); 
} 

int main() 
{ 
    save_as(); 
    return 0; 
} 
+2

'strtok'需要'字符*',但你申报'filename'是一个'char',这是一个字符。在其他问题中'argv [1]'实际上是一个'char *'(指向字符串的指针)。 – kgraney

回答

0

以下行是正确的:

char filename; 
char fileext; 
printf("Filename:\t"); 
scanf("%s", &filename); 
filename = strtok(filename, "."); 
fileext = strtok(NULL, "."); 

然而strtok回报char*并已宣布filenamefileextchar。另请注意,应该有与filename缓冲区关联的内存。将其更改为:

char filename[255]; 
printf("Filename:\t"); 
scanf("%254s", &filename); 
filename = strtok(filename, "."); 
char* fileext = strtok(NULL, "."); 

还要考虑检查这些调用的返回值,因为可能会发生一些错误。

+0

好吧,我改变了文件名和fileext指针,但现在我的程序只是崩溃 – mee

+0

@mee:因为指针未初始化。看到我的编辑:) – LihO

+0

sry,仍然崩溃,但现在它在崩溃前提示我为文件名 – mee

0

你可以拥有的argv [1]:

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

void save_as(char *filename) 
{ 
    // user enters their desired name for the file 
    char *fileext; 

    filename = strtok(filename, "."); // according to the question I mentioned above this should have been: filename = strtok(argv[1], "."); 
    fileext = strtok(NULL, "."); 
} 

int main(int argc, char **argv) 
{ 
    if(argc != 2) 
    { 
     printf("usage: myprogram myfile.myextension"); 
     return 0; 
    } 
    save_as(argv[1]); 

    return 0; 
} 
+0

ima现在尝试dat – mee

+0

nope,现在它立即崩溃当我从我的命令行运行它 – mee

+0

您必须运行您的程序'my_program my_file.my_extension'。我编辑了代码以避免崩溃。 –