2013-10-27 69 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'。我編輯了代碼以避免崩潰。 –