Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 扩展二维矩阵_C_Multidimensional Array - Fatal编程技术网

C 扩展二维矩阵

C 扩展二维矩阵,c,multidimensional-array,C,Multidimensional Array,我有输入矩阵迷宫[3][3]作为 asd usd psd 我想把它转换成两个矩阵mazeW[3][4]和mazeE[3][4]的形式 Wasd Wusd Wpsd 及 我该怎么做?? 我试过了,但没用 for(int i=0;i<row;i++) { strcpy("W",strcpy(mazeW[i],maze[i])); strcpy(strcpy(mazeE[i],maze[i]),"E"); } for(int i=0;ifor(i=0;ifor(i=0;i如果使用strc

我有输入矩阵迷宫[3][3]作为

asd
usd
psd
我想把它转换成两个矩阵mazeW[3][4]和mazeE[3][4]的形式

Wasd 
Wusd
Wpsd

我该怎么做?? 我试过了,但没用

for(int i=0;i<row;i++)
{
strcpy("W",strcpy(mazeW[i],maze[i]));
strcpy(strcpy(mazeE[i],maze[i]),"E");
}

for(int i=0;i
for(i=0;i
for(i=0;i如果使用
strcpy
函数,则源字符串必须以“\0”结尾, 似乎在您的代码迷宫中[3][3]不打算成为字符串数组,因为没有为“\0”保留空间

在这种情况下,您可以使用
strcpy
函数,而不是使用
memcpy
提供要复制的内存大小

for ( i=0; i < row; i++ )
{
    mazeW[i][0] = 'W';
    memcpy ( mazeW[i]+1, maze[i], 3); 

    mazeE[i][3] = 'E';
    memcpy ( mazeE[i], maze[i], 3);
}
(i=0;i { mazeW[i][0]='W'; memcpy(mazeW[i]+1,maze[i],3); mazeE[i][3]=“E”; memcpy(mazeE[i],maze[i],3); }
如果使用的是strcpy函数,则源字符串必须以“\0”结尾, 似乎在您的代码迷宫中[3][3]不打算成为字符串数组,因为没有为“\0”保留空间

在这种情况下,您可以使用
strcpy
函数,而不是使用
memcpy
提供要复制的内存大小

for ( i=0; i < row; i++ )
{
    mazeW[i][0] = 'W';
    memcpy ( mazeW[i]+1, maze[i], 3); 

    mazeE[i][3] = 'E';
    memcpy ( mazeE[i], maze[i], 3);
}
(i=0;i { mazeW[i][0]='W'; memcpy(mazeW[i]+1,maze[i],3); mazeE[i][3]=“E”; memcpy(mazeE[i],maze[i],3); }
在没有发布更多源代码的情况下,看起来和听起来都像是在混淆数组和字符串

< C和C++中的“char”是一个8位的值,通常用来存储ASCII字符。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在线演示:


如果没有发布更多的源代码,看起来和听起来都像是混淆了数组和字符串

< C和C++中的“char”是一个8位的值,通常用来存储ASCII字符。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在线演示:



sizeof(char)==1
你可以简单地使用3。好吧,它对我有效。它到底对你不起作用吗?用一个包含所有不同字符和tryOk的3X3输入,我会编辑答案,但是,你应该能够自己解决这个问题,因为这是一个小问题……@fvdalcin我读到了关于cplusplus.com的memcopy,但没有在t中使用它他的案子。
sizeof(char)==1
你可以简单地使用3。好吧,它对我有效。它到底对你不起作用吗?用一个包含所有不同字符和tryOk的3X3输入,我会编辑答案,但是,你应该能够自己解决这个问题,因为这是一个小问题……@fvdalcin我读到了关于cplusplus.com的memcopy,但没有在t中使用它你的案例是C还是C++?请选择一个C,C++甚至可以这样做:你将从C++的回答者那里得到根本不同的答案,例如“使用STD::vector”或使用复制构造函数的类实现来做这项工作,除非你更明确地说“我想知道复制数组元素[0…n]。到一个类似的数组中,它们将占据位置[1…1 +n]。它们是正确的,因为这些将是C++中正确的方法。而且,基于“不为你工作”的数目。结果,你需要以AN的形式发布更多代码。你可能想使用一个在线代码共享,就像我只在寻找C答案。C或C++。请选择一个。C是C,但C++也可以这样做:你会从C++的回答者那里得到根本不同的答案,例如“使用STD::向量”。或者类实现,使用复制构造函数来做这项工作,除非你更明确地说:“我想知道将数组元素[0…n]复制到一个类似的数组中,它们将占据位置[1…1 +n]”。它们是正确的,因为这些将是C++中正确的方法。而且,基于“不为你工作”的数量。结果,您需要以a的形式发布更多代码。您可能希望使用在线代码共享,就像我只寻求C答案一样。问题是,每次我们都是从整个迷宫数组中复制,而我们需要从迷宫数组的每一行中复制。请参阅@fvdacin answer。多亏了你们两位,问题是每次我们我们从整个迷宫数组中复制,而我们需要从每一行迷宫数组中复制。请参考@fvdalcin答案。多亏了你们两位,我得到了关于字符数组和字符串混淆的编译器警告,但我直到现在才知道memcpy。我得到了关于字符数组和字符串混淆的编译器警告,但直到现在我才知道memcpy现在
#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