###質問の詳細
mainで宣言しているポインタ配列を別の関数に引数として渡します。その時NULLすらも入っていない?ポインタの指定先の領域は呼び出した関数内ではポインタ配列を使って指定できないのでしょうか?質問がややこしくてすみません。具体的にいうと*args[]というポインタ配列に
*args[0} cd
*args[1] *
args[2] NULL
が格納されている状態で関数に引き渡してargs[3]にstrcpyで文字列をコピーしようとするとそこで異常終了しているみたいなんです。もともと何も格納していないargs[3]なので指定領域が存在していないのでエラーを起こしているというイメージであっていますか?そしてその時だと関数内でargs[3]に文字列を格納したい場合はmallocで動的に領域を確保するのが正しいのでしょうか?ソースコードも全体のプログラムの量が多いので問題の関数のみ載せます。 教えていただければ幸いです。よろしくお願いいたします。
###該当のソースコード
c
1void wild(char *args[256]){ 2 printf("wild start\n"); 3 char currentdir[512]; 4 char *stackchar[512]; 5 int i = 0; 6 int count = 0; 7 DIR *dir; 8 int stackint = 0; 9 int hoge = 0; 10 struct dirent *dp; 11 getcwd(currentdir,512); 12 printf("currentdir is %s\n",currentdir ); 13 for(i = 0;args[i] != NULL;i++){ 14 } 15 printf("args's number is %d\n",i); 16 for(count = 0;args[count] != NULL;count++){ 17 if (strcmp(args[count],"*") == 0) { 18 printf("serch *\n"); 19 hoge = count; 20 while(args[count + 1] != NULL){ 21 count++; 22 strcpy(stackchar[stackint],args[count]); 23 stackint++; 24 } 25 26 27 dir = opendir(currentdir); 28 if (dir == NULL) { 29 printf("opendir is not success\n"); 30 } 31 dp = readdir(dir); 32 while(dp != NULL){ 33 printf(" directry name is %s\n",dp -> d_name); 34 //ここが問題の箇所です。 35 strcpy(args[hoge],dp -> d_name); 36 hoge++; 37 dp = readdir(dir); 38 } 39 40 41 closedir(dir); 42 43 i = 0; 44 while (stackchar[i] != NULL) { 45 strcpy(args[hoge],stackchar[i]); 46 i++; 47 hoge++; 48 } 49 50 i = 0; 51 while (args[i] != NULL) { 52 printf("%s\n", args[i]); 53 i++; 54 } 55 } 56 } 57}
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/12 07:15