1、ポインタのポインタを2次元配列で初期化したいです。
C
1 char buf[3][100] = { 2 "you will make me happy", 3 "I love you!", 4 "Thanks" 5 }; 6 7 char **p; 8 char *q[3] = {buf[0], buf[1], buf[2]}; 9 p = q; 10} 11
これは、うまくいきました。
char **pを上記のように初期化すると面倒です。
qを用意しないで、
char **p = buf;
とやりたいのですが・・・・うまくいきません。(warningが出てきます)
どうすれば、よろしいでしょうか?
2、多次元配列の動的確保で落ちます・・・・
C
1#include<stdio.h> 2#include<stdlib.h> 3#include<string.h> 4#define line 100 5 6int main() { 7 int i = 0; 8 char **p; 9 p = (char **)calloc(10, sizeof(char *)); 10 11 char (*q)[line]; // char q[][line] 12 int n = 4; 13 q = (char(*)[line])malloc(n * (sizeof(char) * line)); // char q[n][line] 14 15 char *r[line]; // char r[line][] 16 for (i = 0; i < line; i++) 17 r[i] = calloc(100, sizeof(char)); 18 19 if (p) { 20 p[0] = "DESTINY"; 21 p[1] = "I love you!!"; 22 23 printf("p : %s %s\n", p[0], p[1]); 24 for(i = 0; i < 10; i++) 25 free(p[n]); 26 } else 27 printf("failed!!\n"); 28 29 if (q) { 30 strcpy(q[0], "you will make me sad"); 31 strcpy(q[1], "basketball"); 32 33 printf("q : %s %s\n", q[0], q[1]); 34 free(q); 35 } else 36 printf("failed!!\n"); 37 38 if (r) { 39 r[0] = "you will make me happy"; 40 r[1] = "but I don't like you"; 41 42 printf("r : %s %s\n", r[0], r[1]); 43 for(i = 0; i < line; i++) 44 free(r[i]); 45 } 46 else 47 printf("failed!!\n"); 48 49 return 0; 50} 51
これ、コンパイルはおkでしたが、実行すると落ちます。
一体どこがおかしいのでしょう・・・
3番目のrを追加したら、おかしくなりました。
ダメな箇所の指摘をお願いします。
Windows
visual stdio
でやってみました。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/01/22 10:59
2017/01/22 11:09
2017/01/22 11:46
2017/01/22 11:52
2017/01/22 12:04