2012-04-10 100 views
0

我已經構建了一個C應用程序,當我構建它時,它沒有顯示任何錯誤,但是當我運行它時,它給了我錯誤「Segmentation Fault:11」。 如果有幫助,這裏是我使用的代碼:運行時出現C應用程序錯誤

#include <stdio.h> 
int main(char *argv[]) { 
printf("The project path is: ./Projects/%c", argv[1]); 
return 0; 
} 

回答

1

你有許多問題:

  • main的簽名是參數的數量,接着爲C字符串數組。
  • 在使用數組之前,您應該始終檢查計數。
  • 該數組是字符串,因此您需要%s來打印它們。

這應該工作:

#include <stdio.h> 
int main(int argc, char *argv[]) { 
    if (argc < 2) 
     fprintf (stderr, "Wrong number of arguments\n"); 
    else 
     printf ("The project path is: ./Projects/%s\n", argv[1]); 
    return 0; 
} 
+0

時,它仍然沒有打印輸入的字符串。我正在處理所有的響應,並且我確保嘗試每個人,但是我沒有發現我打算使用%s而不是printf上的%c,從現在開始,我會記得檢查是否有足夠的命令行參數。謝謝 :) – Matthew 2012-04-10 09:49:34

3

正確main原型語法

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

而且%c轉換說明在printf打印字符,打印字符串中使用%s

0
  1. 更改簽名int main(int, char*[]);
  2. 參數是你傳遞給過程是什麼?如果你不傳遞任何argv[1]超出範圍
+0

我傳遞1個參數的方案,這是該項目的名稱。但是,當我使用argv [1] – Matthew 2012-04-10 09:44:30

0

首先,改變你的主要以:

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

其次,你有你傳遞給printf的東西之間的不匹配,和你已經告訴你,你會通過。 argv[1]是一個指針到字符,而不是一個字符。你需要/想使用%s轉換將其打印出來:

printf("The project path is: ./Projects/%s", argv[1]); 

在這種特定的情況下,它不是真正的強制性檢查足夠的參數,因爲即使你不傳遞任何命令行參數, argv將至少包含argv[0]後跟空指針。因此,使用argv[1]是安全的,但是如果您未通過命令行參數,則可能會打印爲類似(null)的內容。

儘管如此,在使用argv之前,您通常需要檢查argc的值。在這種情況下,你可以避開它,但只是或多或少偶然發生。試圖以相同的方式使用argv[2]可能會導致未定義的行爲。

0

除了其他建議,您可能需要重新訪問您的printf格式。 %c用於打印單個字符,並且argv[1]char *。請使用argv[1][0]或其他類型,或使用字符串格式說明符%s

相關問題