#include #include #include int main(int argc, char *argv[]){ int i, j, len, len_k; char *name; char ext_in[4]; /* ラスト3文字(+ヌル文字)と".in"の比較用の変数 */ char ext_out[5]=".out"; for( i=1 ; i= 3 ){ /* 最後の 3文字+null文字 を取り出す */ for( j=0 ; j<4 ; j++ ) ext_in[j] = argv[i][len-3+j]; /* 最後が".in"だったら3文字短縮する必要がある */ if( strcmp(ext_in,".in") == 0 ) len_k = len-3; } /* 新しい文字列のためメモリ確保。 */ /* .out とヌル文字で、計5文字分追加する必要がある。 */ name = (char *) malloc( sizeof(char)*(len_k+5) ); /* 入力された文字列をコピー */ strcpy(name, argv[i]); /* 末尾に .outとnull文字 を付け足す */ /* 最初からlen_k文字分はそのままで、それ以降を変更 */ for( j=0 ; j<5 ; j++ ) name[len_k+j] = ext_out[j]; printf("%s -> %s\n", argv[i], name); free(name); } return 0; } /* 文字列の性質を使い、以下のようにしても解けます。 if( len>=3 ){ if( strcmp(argv[i]+(len-3), ".in") == 0 ) len_k=len-3; } name = (char *) malloc( sizeof(char)*(len_k+5) ); strcpy(name, argv[i]); strcpy(name+len_k, ".out"); */