C printf()打印整个字符矩阵

C printf()打印整个字符矩阵,c,matrix,char,printf,C,Matrix,Char,Printf,如代码所示,第一个printf()正确地只打印矩阵的第i行。但是在循环之外,printf()和strcat()作为一个单行字符串作用于从第i行开始的整个矩阵。这意味着 printf("%s\n",m_cfr[0]) 将打印整个矩阵,但m_cfr[i]将从第i行开始打印整个矩阵char*string是一个没有空格的单行字符串 trasp(char* string) { int row = strlen(string) / 5; char m[row][5]; char m

如代码所示,第一个
printf()
正确地只打印矩阵的第i行。但是在循环之外,
printf()
strcat()
作为一个单行字符串作用于从第i行开始的整个矩阵。这意味着

printf("%s\n",m_cfr[0])
将打印整个矩阵,但m_cfr[i]将从第i行开始打印整个矩阵
char*string
是一个没有空格的单行字符串

trasp(char* string)
{
    int row = strlen(string) / 5;
    char m[row][5];
    char m_cfr[row][5];
    char cfr[row*5];

    memset(cfr, 0, row * 5);

    int key[5] = {3, 1, 2, 0, 4};
    int k      = 0;

    for (i = 0 ; i < row ; i++)
    {
        strncpy(m[i], string + k, 5);

        m[i][5] = '\0';
        k      += 5;    
    }

    for (i = 0 ; i < row ; i++)
    {
        for (j = 0 ; j < 5 ; j++)
        {
            m_cfr[i][key[j]] = m[i][j];
        }
        m_cfr[i][5] = '\0';
        printf("%s\n", m_cfr[i]);  //--->prints only line i
    }    
    printf("%s\n", m_cfr[0]); //prints whole matrix    
    strcat(cfr, m_cfr[0]);   //concatenates whole matrix       
    printf("%s\n", cfr);
}
trasp(字符*字符串)
{
int row=strlen(字符串)/5;
字符m[行][5];
char m_cfr[世界其他地区][5];
字符cfr[第5行];
memset(cfr,0,第5行);
int键[5]={3,1,2,0,4};
int k=0;
对于(i=0;i只打印第i行
}    
printf(“%s\n”,m_cfr[0]);//打印整个矩阵
strcat(cfr,m_cfr[0]);//连接整个矩阵
printf(“%s\n”,cfr);
}

在代码中,数组定义是

char m_cfr[row][5];
当你访问

 m_cfr[i][5] = '\0';
 /*       ^
          | 
          there is no 6th element
 */
你正在面对。超出内存访问限制的原因

也许您想将null终止语句更改为

m_cfr[i][4] = '\0'; //last one is null

在代码中,数组定义是

char m_cfr[row][5];
当你访问

 m_cfr[i][5] = '\0';
 /*       ^
          | 
          there is no 6th element
 */
你正在面对。超出内存访问限制的原因

也许您想将null终止语句更改为

m_cfr[i][4] = '\0'; //last one is null

在代码中,数组定义是

char m_cfr[row][5];
当你访问

 m_cfr[i][5] = '\0';
 /*       ^
          | 
          there is no 6th element
 */
你正在面对。超出内存访问限制的原因

也许您想将null终止语句更改为

m_cfr[i][4] = '\0'; //last one is null

在代码中,数组定义是

char m_cfr[row][5];
当你访问

 m_cfr[i][5] = '\0';
 /*       ^
          | 
          there is no 6th element
 */
你正在面对。超出内存访问限制的原因

也许您想将null终止语句更改为

m_cfr[i][4] = '\0'; //last one is null

%s
需要一个
字符*
并打印所有内容,直到遇到
\0
。所以

printf("%s\n", m_cfr[i]);
printf("%s\n",m_cfr[0]);
strcat(cfr,m_cfr[0]);
所有这些都表现出未定义的行为,如
m_cfr[i]
m_cfr[0]
m_cfr[0]
char
s而不是
char*
s和
%s
,以及
strcat
的两个参数都需要
char*
。另外,作为,使用

你错了

要解决前一个问题,请使用

printf("%s\n", &m_cfr[i]);
printf("%s\n",m_cfr);
strcat(cfr,&m_cfr[0]);
要打印整个字符串并在
strcat
的参数中连接两个字符串,或者如果只想打印
字符,请使用

printf("%c\n", m_cfr[i]);
printf("%c\n",m_cfr[0]);
对于后一个问题,使用

char m[row][5]={{0}};
char m_cfr[row][5]={{0}};

%s
需要一个
字符*
并打印所有内容,直到遇到
\0
。所以

printf("%s\n", m_cfr[i]);
printf("%s\n",m_cfr[0]);
strcat(cfr,m_cfr[0]);
所有这些都表现出未定义的行为,如
m_cfr[i]
m_cfr[0]
m_cfr[0]
char
s而不是
char*
s和
%s
,以及
strcat
的两个参数都需要
char*
。另外,作为,使用

你错了

要解决前一个问题,请使用

printf("%s\n", &m_cfr[i]);
printf("%s\n",m_cfr);
strcat(cfr,&m_cfr[0]);
要打印整个字符串并在
strcat
的参数中连接两个字符串,或者如果只想打印
字符,请使用

printf("%c\n", m_cfr[i]);
printf("%c\n",m_cfr[0]);
对于后一个问题,使用

char m[row][5]={{0}};
char m_cfr[row][5]={{0}};

%s
需要一个
字符*
并打印所有内容,直到遇到
\0
。所以

printf("%s\n", m_cfr[i]);
printf("%s\n",m_cfr[0]);
strcat(cfr,m_cfr[0]);
所有这些都表现出未定义的行为,如
m_cfr[i]
m_cfr[0]
m_cfr[0]
char
s而不是
char*
s和
%s
,以及
strcat
的两个参数都需要
char*
。另外,作为,使用

你错了

要解决前一个问题,请使用

printf("%s\n", &m_cfr[i]);
printf("%s\n",m_cfr);
strcat(cfr,&m_cfr[0]);
要打印整个字符串并在
strcat
的参数中连接两个字符串,或者如果只想打印
字符,请使用

printf("%c\n", m_cfr[i]);
printf("%c\n",m_cfr[0]);
对于后一个问题,使用

char m[row][5]={{0}};
char m_cfr[row][5]={{0}};

%s
需要一个
字符*
并打印所有内容,直到遇到
\0
。所以

printf("%s\n", m_cfr[i]);
printf("%s\n",m_cfr[0]);
strcat(cfr,m_cfr[0]);
所有这些都表现出未定义的行为,如
m_cfr[i]
m_cfr[0]
m_cfr[0]
char
s而不是
char*
s和
%s
,以及
strcat
的两个参数都需要
char*
。另外,作为,使用

你错了

要解决前一个问题,请使用

printf("%s\n", &m_cfr[i]);
printf("%s\n",m_cfr);
strcat(cfr,&m_cfr[0]);
要打印整个字符串并在
strcat
的参数中连接两个字符串,或者如果只想打印
字符,请使用

printf("%c\n", m_cfr[i]);
printf("%c\n",m_cfr[0]);
对于后一个问题,使用

char m[row][5]={{0}};
char m_cfr[row][5]={{0}};


printf打印字符,直到出现第一个0字节。
m_cfr[i][5]='\0'当只有五个元素时,您正在写入第六个元素。矩阵的每一行都以null结尾,您可以看到问题是什么?@juanchopanza先生,我想OP想知道“为什么
//打印整个矩阵
”:-)printf打印字符,直到出现第一个0字节。
m\u cfr[I][5]='\0'当只有五个元素时,您正在写入第六个元素。矩阵的每一行都以null结尾,您可以看到问题是什么?@juanchopanza先生,我想OP想知道“为什么
//打印整个矩阵
”:-)printf打印字符,直到出现第一个0字节。
m\u cfr[I][5]='\0'当只有五个元素时,您正在写入第六个元素。矩阵的每一行都以null结尾,您可以看到问题是什么?@juanchopanza先生,我想OP想知道“为什么
//打印整个矩阵
”:-)printf打印字符,直到出现第一个0字节。
m\u cfr[I][5]='\0'当只有五个元素时,您正在写入第六个元素。矩阵的每一行都以null结尾,您可以看到问题是什么?@juanchopanza先生,我想OP想知道“为什么打印整个矩阵”
”:-)也谢谢@MarcoBonelli.:-)什么?从什么时候开始可以知道谁对一个项目投了票