ソースをもっと投稿しないと、配列と文字列を混同しているように見えます。
C および C++ では、「char」は通常 ASCII 文字を格納するために使用される 8 ビット値です。ASCII テーブルは周期表のようなもので、数値で参照できるように番号付きのリストを提供します。周期表の 1 は水素で、元素 1 です。ASCII では、値 32 は空白文字を表し、値 48 は「0」文字を表し、49 は「1」を表します。
C および C++ では、一連の文字が文字列として扱われることになっている場合、ASCII 値が 0 ('0' ではなく 0、'\0' とも書かれる) の文字で終わらなければならないという規則があります。 )。
したがって、3 文字の文字列を保存するには、4 文字またはバイトが必要です。
char foo[3] = "foo"; // illegal. "foo" is actually { 'f', 'o', 'o', 0 };
char bar[4] = "foo"; // ok
配列は文字列ではなく文字配列のように見えるため、「strcpy」などを使用することはできません。「memcpy」を使用するか、要素を手動でコピーする必要があります。
これは、解決しようとしている問題の作業バージョンです。これが役立つことを願っています。
ideone でのオンライン デモ: http://ideone.com/6TcapX
#include <stdio.h>
#include <string.h>
#define MAZE_COLUMNS 3
#define MAZE_ROWS 3
#define MAZEW_COLUMNS 4
#define MAZEE_COLUMNS 4
static void transcribeMazeRow(const char* source, size_t srcColumns, char prefix, char* dest, size_t destColumns)
{
dest[0] = prefix;
memcpy(&dest[1], &source[0], srcColumns * sizeof(source[0]));
}
int main(int argc, char* argv[])
{
// 3 rows of 3 columns, each is a distinct char. this is not a string.
char maze[MAZE_ROWS][MAZE_COLUMNS] = { { 'a', 's', 'd' }, { 'u', 's', 'd' }, { 'p', 's', 'd' } };
// 3 rows of 4 columns, distinct character values, not a string.
char mazeW[MAZE_ROWS][MAZEW_COLUMNS];
char mazeE[MAZE_ROWS][MAZEE_COLUMNS];
for (size_t row = 0; row < MAZE_ROWS; ++row) {
transcribeMazeRow(maze[row], MAZE_COLUMNS, 'W', mazeW[row], MAZEW_COLUMNS);
transcribeMazeRow(maze[row], MAZE_COLUMNS, 'E', mazeE[row], MAZEE_COLUMNS);
}
// this part is mostly to show the poster the correct way to refer to all elements of each array.
printf("maze: %c%c%c, %c%c%c, %c%c%c\n",
maze[0][0], maze[0][1], maze[0][2],
maze[1][0], maze[1][1], maze[1][2],
maze[2][0], maze[2][1], maze[2][2] );
printf("mazeW: %c%c%c%c, %c%c%c%c, %c%c%c%c\n",
mazeW[0][0], mazeW[0][1], mazeW[0][2], mazeW[0][3],
mazeW[1][0], mazeW[1][1], mazeW[1][2], mazeW[1][3],
mazeW[2][0], mazeW[2][1], mazeW[2][2], mazeW[2][3] );
printf("mazeE: %c%c%c%c, %c%c%c%c, %c%c%c%c\n",
mazeE[0][0], mazeE[0][1], mazeE[0][2], mazeE[0][3],
mazeE[1][0], mazeE[1][1], mazeE[1][2], mazeE[1][3],
mazeE[2][0], mazeE[2][1], mazeE[2][2], mazeE[2][3] );
return 0;
}
出力:
maze: asd, usd, psd
mazeW: Wasd, Wusd, Wpsd
mazeE: Easd, Eusd, Epsd