c - 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_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);
}

最佳答案

在你的代码中,你的数组定义是

char m_cfr[row][5];

访问时

 m_cfr[i][5] = '\0';
 /*       ^
          | 
          there is no 6th element
 */

你面对的是off-by-one error .越界内存访问导致undefined behaviour .

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

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

关于c - printf() 打印整个字符矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28431354/

相关文章:

计算哈希表中字符串的个数

c++ - 运行程序时出现运行时错误,但使用调试器时却没有

algorithm - 排序矩阵搜索主定理分析

c++ - 如何确保只输入 int 而不是 char?

c++ - 1 个字符的字符串文字是否曾针对简单的 char 类型文字进行过优化?

swift - 我的代码在 textViewDidChangeSelection 中插入两个字符而不是一个

c - 使用 "while loop"而不是使用 "for loop"删除链表中的节点时出现错误

c - 如何在 C 中将给定位从一个位掩码设置为另一个位掩码?

r - 生成独特的用户-项目跨产品组合矩阵

r - 如何检查矩阵是否包含特定行?