ダブルポインタを使ってchar型二次元配列を動的確保するにはどういうふうに定義するのでしょうか?
色々調べたのですが該当するサイトが見つからなかったのでここで質問させてもらいました。
該当するサイトの提示もしくは、サンプルコードを提示していただけると嬉しいです!
C
1char str[5][10]; // <- これを動的確保で作りたい
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答5件
0
ダブルポインターとの関係がわかりませんが、
char str[5][10]; // <- これを動的確保で作りたい
であれば、
C
1 char (*str)[5][10]; 2 int i,j; 3 4 str = malloc(sizeof *str); 5 6 for(i=0; i<5; i++){ 7 for(j=0; j<10; j++){ 8 printf("[%d][%d] = %p\n",i,j,&((*str)[i][j])); // => 連続領域に取られる 9 } 10 }
投稿2020/12/23 04:24
総合スコア85893
0
C
1int main() 2{ 3 int rows = 5; 4 int cols = 10; 5 6 char **str; //※ダブルポインタを使うことがmustらしい 7 { 8 size_t RowPtrsSize = sizeof(char*)*rows; 9 size_t Char2DBuffSize = sizeof(char)*rows*cols; 10 11 str = (char**)malloc( RowPtrsSize + Char2DBuffSize ); 12 str[0] = (char*)( str+rows ); 13 for( int i=1; i<rows; ++i ){ str[i] = str[i-1] + cols; } 14 } 15 16 {//Test 17 for( int i=0; i<rows*cols; ++i ) 18 { str[0][i] = 'a' + (i%26); } 19 20 for( int r=0; r<rows; ++r ) 21 { 22 str[r][cols-1] = '\0'; 23 printf( "%s\n", str[r] ); 24 } 25 } 26 27 // 28 free( str ); 29 return 0; 30}
投稿2020/12/23 05:14
総合スコア11990
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/23 06:33 編集
2020/12/23 06:35
2020/12/23 06:53
0
ベストアンサー
char**内のchar*も動的配列とするのなら
下記コードのようになるのではないでしょうか。
c
1#include <stdio.h> 2#include <stdlib.h> 3#include <stddef.h> 4#include <string.h> 5 6int main(void){ 7 size_t col = 5; 8 size_t row = 12; 9 10 // メモリ確保 11 char** mem = (char**)malloc(sizeof(char*) * col); 12 for(size_t c=0; c<col; ++c) mem[c] = (char*)malloc(sizeof(char) * row); 13 14 // 全ての行へ文字列を流し込む 15 for(size_t c=0; c<col; ++c) strcpy(mem[c], "hello world"); 16 17 // すべての行の文字列表示 18 for(size_t c=0; c<col; ++c) printf("%s\n", mem[c]); 19 20 // 開放 21 for(size_t c=0; c<col; ++c) free(mem[c]); 22 free(mem); 23 24 /*---------------------------------------------------- 25 *実行結果* 26 hello world 27 hello world 28 hello world 29 hello world 30 hello world 31 *///-------------------------------------------------- 32}
投稿2020/12/23 04:36
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/12/23 04:43
2020/12/23 04:58
退会済みユーザー
2020/12/23 05:31 編集
2020/12/23 05:36
2020/12/23 05:52
退会済みユーザー
2020/12/23 06:21 編集
2020/12/23 06:26
0
c
1#define ROW_SIZE (5) 2#define COL_SIZE (10) 3 4char **str; // ポインタの宣言 5 6str = (char **)malloc( size_of(char)*ROW_SIZE*COL_SIZE ); // 動的メモリ取得 7 8 str[2][3] = 0; // アクセス 9}
こんな感じですかね。
投稿2020/12/23 04:12
総合スコア56
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/23 04:19
2020/12/23 04:39 編集
0
C - ダブルポインタをchar (*)[20]型として関数に渡したい|teratail
この回答は読まなかったんでしょうか
投稿2020/12/23 04:07
総合スコア88040
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。