[英]c command line arguments
#include <stdio.h>
#include <string.h>
int convert(char *str)
{
int i, number = 0;
for (i = 0; str[i] != '\0'; ++i) {
number = number * 10 + str[i] - '0';
}
return number;
}
int main(int argc, char *argv[])
{
int j;
int c = convert(argv[2]);
if (argc == 3) {
for (j = 0; j < c; j++) {
printf("Hello, %s!\n", argv[1]);
}
} else if (argc < 3) {
printf("Not Enough Arguments\n");
} else if (argc > 3) {
printf("Too Many Arguments\n");
}
return 0;
}
給出少於3個參數時出現分段錯誤。 如果給出少於3個參數,則應打印“參數不足”,但會出現錯誤分段錯誤。
輸入: ./a raju
預期輸出: not enough arguments
int c = convert(argv[2]);
當argc
為2時, argv[2]
將為NULL
。 您希望這行代碼能做什么,因為程序運行時首先要執行它?
進行重構,以使其下方的條件構成針對該條件的保護,這與您可能想要的目的更接近:
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int convert(char *str)
{
int i, number = 0;
for (i = 0; str[i] != '\0'; ++i) {
number = number * 10 + str[i] - '0';
}
return number;
}
int main(int argc, char *argv[])
{
if (argc != 3) {
printf( argc < 3 ? "Not Enough Arguments\n"
/*argc > 3*/ : "Too Many Arguments\n" );
exit(EXIT_FAILURE);
}
int c = convert(argv[2]);
for (int j = 0; j < c; j++) {
printf("Hello, %s!\n", argv[1]);
}
return 0;
}
PS由於argv[0]
通常是程序名稱而不是參數,因此argv[1]
和argv[2]
將作為您的參數, argv[3]
將為NULL
,如果您對它們進行計數,則將計算兩個參數,而不是三; 當給出三個參數時,期望argc == 4
。
您可能對getopt.h庫感興趣。 它處理命令行參數的所有標准功能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.