#概要(実現したいこと)
const char *c[AS] = {"1", "2", "3"};
の配列を関数に渡して、
memcpy(b, c, sizeof(*c));
関数内で配列をコピーしたい。
その後ソートなどの処理をしたいので元データの配列順序は変更したくない。
#問題点
期待通りの配列コピーが出来ないのですがどこが良くないのか分からないのでアドバイス頂けると助かります。
funcA()の出力
正:1 2 3
funcB()の出力
誤:1 (null) (null)
#回答とアドバイスを頂き試したこと
memcpy(b, c, sizeof(*c) * AS);
配列の要素数AS(=3)を掛けたらうまくいきました。
8 x 3 = 24 byte?
うまくはいきましたがこの書き方が一般的なのでしょうか?
アドバイスなどあればコメントください。
C
1void funcB(const char *c[AS]) { 2 char *b[AS]; 3 memcpy(b, c, sizeof(*c) * AS); 4 printf("%d %d\n", sizeof(*b), sizeof(*c)); 5 printf("%d %d\n", sizeof(b), sizeof(c)); 6 printf("%s %s %s\n", b[0], b[1], b[2]); 7}
output
11 2 3 28 8 324 8 //←ここで気づきました 41 2 3
#質問時のコード
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <string.h> 4#define AS (3) // ARRAY_SIZE 5 6void funcA() { 7 char *a[AS] = {"1", "2", "3"}; 8 printf("%s %s %s\n", a[0], a[1], a[2]); 9} 10 11void funcB(const char *c[AS]) { 12 char *b[AS]; 13 memcpy(b, c, sizeof(*c)); 14 printf("%s %s %s\n", b[0], b[1], b[2]); 15} 16 17int main(void) { 18 const char *c[AS] = {"1", "2", "3"}; 19 funcA(); 20 funcB(c); 21 getchar(); 22} 23
output
11 2 3 21 (null) (null)
開発環境
Win10 (10.0.18362)
VSC1.48.2
C11 C++17 boost
gcc version 10.2.0 (Rev1, Built by MSYS2 project)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/07 06:46
2020/09/07 12:19 編集
2020/09/07 12:19