【配列とポインタ】第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"

だから何だ!!!