c言語のコマンドライン引数を使った文字の判別のプログラム
Posted: 2012年1月31日(火) 13:19
c言語のコマンドライン引数を使った文字の判別のプログラムです。自分で書いたプログラムではセグメンテーション違反になってしまいます。どこがおかしいでしょうか?下に正しい実行例をのせておきます。
<code>
#include <stdio.h>
#include<ctype.h>
char *isalpha_p(void) {
return "an alphabet";
}
char *isdigit_p(void) {
return "a digit";
}
char *islower_p(void) {
return "lowercase";
}
char *isupper_p(void) {
return "uppercase";
}
int main(int argc, char *argv[])
{
int (*p[])(int c) = {isalpha, isdigit, islower, isupper};
char *(*q[])(void)={isalpha_p, isdigit_p, islower_p, isupper_p};
if (argc < 3)
{
printf("Usage: ./5-1b -adlu char\n");
}
int i;
char c;
c = argv[2];
if(argv[1]="-a"){
i=0;
}else if(argv[1]="-d"){
i=1;
}else if(argv[1]="-l"){
i=2;
}else if(argv[1]="-u"){
i=3;
}else{
printf("Error: unknonw option: \"%c\"\n", c);
printf("Usage: ./5-1b -adlu char\n");
}
if(p(c)) {
printf(" '%s' is %s.\n", c, q());
}else{
printf(" '%s' is NOT %s.\n", c, q());
}
return 0;
}
実行例$ ./check_char ←※プログラム名を check_char として、コマンドライン引数なしで実行
Usage: ./check_char -adlu char
$ ./check_char -a 0
'0' is NOT an alphabet.
$ ./check_char -a U
'U' is an alphabet.
$ ./check_char -e 3 ←※謎のオプション "-e" を指定
Error: unknonw option: "-e".
Usage: ./check_char -adlu char
$
<code>
#include <stdio.h>
#include<ctype.h>
char *isalpha_p(void) {
return "an alphabet";
}
char *isdigit_p(void) {
return "a digit";
}
char *islower_p(void) {
return "lowercase";
}
char *isupper_p(void) {
return "uppercase";
}
int main(int argc, char *argv[])
{
int (*p[])(int c) = {isalpha, isdigit, islower, isupper};
char *(*q[])(void)={isalpha_p, isdigit_p, islower_p, isupper_p};
if (argc < 3)
{
printf("Usage: ./5-1b -adlu char\n");
}
int i;
char c;
c = argv[2];
if(argv[1]="-a"){
i=0;
}else if(argv[1]="-d"){
i=1;
}else if(argv[1]="-l"){
i=2;
}else if(argv[1]="-u"){
i=3;
}else{
printf("Error: unknonw option: \"%c\"\n", c);
printf("Usage: ./5-1b -adlu char\n");
}
if(p(c)) {
printf(" '%s' is %s.\n", c, q());
}else{
printf(" '%s' is NOT %s.\n", c, q());
}
return 0;
}
実行例$ ./check_char ←※プログラム名を check_char として、コマンドライン引数なしで実行
Usage: ./check_char -adlu char
$ ./check_char -a 0
'0' is NOT an alphabet.
$ ./check_char -a U
'U' is an alphabet.
$ ./check_char -e 3 ←※謎のオプション "-e" を指定
Error: unknonw option: "-e".
Usage: ./check_char -adlu char
$