2012-06-05 57 views
1

我有以下簡單的程序。我從命令行運行「program file.txt」並得到「總線錯誤」而沒有輸出。我不知道我在這裏做錯了什麼。簡單C程序中的總線錯誤

#include<stdio.h> 

int main(char *arg[]) 
{ 

    FILE *file = fopen(arg[0], "r"); 

    if (file == NULL) { 
     printf("Cannot open file.\n"); 
     exit(1); 
    } 

    return 1; 
} 

回答

2

你可以打印出arg的值[0],假設的主要類型是

int main(int argc, char* argv[]) 

和argv的[0]是進程的名稱,所述的argv [1]是第一個論點。

+0

不,我在打印出arg [0]時也遇到了麻煩。 –

+2

所以,改變你的主要類型爲int main(int argc,char * argv []) – RolandXu

+0

好的,謝謝!完美工作!改爲您的建議,並使用argv [1],它的工作。在這種情況下, –

3

原型爲C項功能是

int main(int argc, char *arg[]); 

因此,與你的原型,你實際上是試圖取消引用一個int來傳遞給fopen
試試這個

#include<stdio.h> 
int main(int argc, char *argv[]) 
{ 
    FILE *file = fopen(argv[1], "r"); 
    if (file == NULL) { 
     printf("Cannot open file.\n"); 
     exit(1); 
    } 
    return 1; 
} 
1

標準原型對於main()應該看起來像這樣:

int main(int argc,char * argv []);

你只用一個參數argv來聲明你的main()。但系統傳遞了一系列參數作爲第一個參數。

當您指定單個參數(文件file.txt)時,argc設置爲1.但您的程序嘗試使用整數1作爲char **。這給總線錯誤。

這是你的程序的編輯版本的作品:

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char *argv[]) 
{ 

    FILE *file; 

    if (argc != 2) 
    { 
     fprintf(stderr, "Usage: myprogram <filename>\n"); 
     exit(1); 
    } 

    file = fopen(argv[1], "r"); 

    if (file == NULL) { 
     fprintf(stderr, "Cannot open file.\n"); 
     exit(2); 
    } 

    exit(0); // status 0 to signal no error 
} 

變化:

  • 我加#include <stdlib.h>得到的exit()聲明。

  • 我檢查參數的數量,並打印Usage:字符串,如果它不正確。

  • 我將錯誤消息打印到stderr而不是標準輸出。

  • 我將return 1更改爲exit(0)以明確程序正在退出成功。

0

argv[0]包含應用程序名稱。請嘗試使用argv[1]

+0

'arg'保存傳遞的參數個數。 – phoxis