【配列とポインタ】第6回 char **argvを実装してみる(2)
前回の擬似argv実装を、いい感じにリライトしてみた(つもり)です。
マジックナンバーがかっこ悪いですが、動的配列の機能はC99からなので使用禁止。
使用する変数は、以下の通り。
変数 | 役割 |
---|---|
char string | 文字列の実体を格納する領域 |
char *arg_plist[] | 各文字列の位置情報を格納するテーブル領域 |
char **argv2 | テーブルの位置情報を格納する領域 |
int argc2 | 引数文字列の数を格納する領域 |
int i | 汎用ループカウンタ |
1 #include <stdio.h> 2 3 int main(void) 4 { 5 char string[][4] = {"aaa", "bbb", "ccc"}; 6 char *arg_plist[4]; 7 char **argv2; 8 int argc2; 9 int i; 10 11 /* 引数アドレス一覧のエントリ数を取得 */ 12 argc2 = sizeof(string)/sizeof(*string); 13 arg_plist[argc2] = NULL; 14 15 /* アドレス一覧に各文字列の位置情報を登録 */ 16 for(i=0; i<argc2; i++){ 17 arg_plist[i] = string[i]; 18 } 19 20 /* アドレス一覧の位置情報を取得 */ 21 argv2 = arg_plist; 22 23 /* argv2をウィンドウにして引数文字列一覧をダンプ */ 24 printf("argc2 = %d\n", argc2); 25 for(i=0; argv2[i] != NULL; i++) 26 printf("argv2[%d] = \"%s\"\n", i, argv2[i]); 27 28 return 0; 29 }
# 実行結果
argc2 = 3 argv2[0] = "aaa" argv2[1] = "bbb" argv2[2] = "ccc"
だから何だ!!!