我已經構建了一個C應用程序,當我構建它時,它沒有顯示任何錯誤,但是當我運行它時,它給了我錯誤「Segmentation Fault:11」。 如果有幫助,這裏是我使用的代碼:運行時出現C應用程序錯誤
#include <stdio.h>
int main(char *argv[]) {
printf("The project path is: ./Projects/%c", argv[1]);
return 0;
}
我已經構建了一個C應用程序,當我構建它時,它沒有顯示任何錯誤,但是當我運行它時,它給了我錯誤「Segmentation Fault:11」。 如果有幫助,這裏是我使用的代碼:運行時出現C應用程序錯誤
#include <stdio.h>
int main(char *argv[]) {
printf("The project path is: ./Projects/%c", argv[1]);
return 0;
}
你有許多問題:
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;
}
正確main
原型語法
int main(int argc, char *argv[]) { ... }
而且%c
轉換說明在printf
打印字符,打印字符串中使用%s
。
int main(int, char*[]);
argv[1]
超出範圍我傳遞1個參數的方案,這是該項目的名稱。但是,當我使用argv [1] – Matthew 2012-04-10 09:44:30
首先,改變你的主要以:
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]
可能會導致未定義的行爲。
除了其他建議,您可能需要重新訪問您的printf格式。 %c
用於打印單個字符,並且argv[1]
是char *
。請使用argv[1][0]
或其他類型,或使用字符串格式說明符%s
。
時,它仍然沒有打印輸入的字符串。我正在處理所有的響應,並且我確保嘗試每個人,但是我沒有發現我打算使用%s而不是printf上的%c,從現在開始,我會記得檢查是否有足夠的命令行參數。謝謝 :) – Matthew 2012-04-10 09:49:34