如果按 C 中整个数组的行打印二维数组,则输出不同的值
2D array outputing different values if you print it by line of the entire array in C
嘿 Whosebug 社区!
我的 C 代码中发生了一件奇怪的事情。
这里是相关代码部分:
( "tab4" 是一个 16 长的 1 维数组,用整数填充,"tab" 是一个用 0 填充的 4x4 二维数组)
我正在尝试将 tab4 的值放入 "tab"("tab" 的每一行得到 tab4 的 4 位数字)
我打印了一些来测试结果
for (int u = 0; u < 4; u++)
{
tab[0][u] = tab4[u];
printf(" %d ", tab[0][u]);
}
printf("\n");
for (int yu = 4; yu < 8; yu++)
{
tab[1][yu] = tab4[yu];
printf(" %d ", tab[1][yu]);
}
printf("\n");
for (int cont = 8; cont < 12; cont++)
{
tab[2][cont] = tab4[cont];
printf(" %d ", tab[2][cont]);
}
printf("\n");
for (int ye = 12; ye < 16; ye++)
{
tab[3][ye] = tab4[ye];
printf(" %d ", tab[3][ye]);
}
printf("\n\n");
for (int i = 0; i < 4; i++)
{
printf("\n");
for (int y = 0; y < 4; y++)
{
printf(" %d ", tab[i][y]);
}
}
printf("\n\n");
这里发生的奇怪事情是,当我逐行打印 "tab" 时,它可以工作,但是当我将它作为一个整体打印时,它却没有。
这是我的输出:
This is the array, printed line by line
16 8 4 0
8 64 0 0
0 0 0 0
0 0 0 0
here is the array printed as a whole
16 8 4 0
0 0 0 0
8 64 0 0
0 0 0 0
这可能与我收到的一些警告有关:
Severity Code Description Project File Line Suppression State
Warning C6386 Buffer overrun while writing to 'tab[1]': the writable size is '16' bytes, but '20' bytes might be written.
Severity Code Description Project File Line Suppression State
Warning C6385 Reading invalid data from 'tab[1]': the readable size is '16' bytes, but '20' bytes may be read.
(所有 "for" 循环的警告相同)
我知道这意味着我正在尝试写一些我不应该写的地方,但我不知道我怎么可能那样做
感谢您的回答!
循环使得
for (int yu = 4; yu < 8; yu++)
{
tab[1][yu] = tab4[yu];
printf(" %d ", tab[1][yu]);
}
不正确。数组 tab
的第二个 "row" (一维数组)具有有效索引范围 [0, 4].
所以你至少需要重写
for (int yu = 4; yu < 8; yu++)
{
tab[1][yu-4] = tab4[yu];
printf(" %d ", tab[1][yu-4]);
}
或者您可以使用以下循环填充数组选项卡
for ( int i = 0, k = 0; i < 4; i++)
{
for ( int j = 0; j < 4; j++ )
{
tab[i][j] = tab4[k++];
printf(" %d ", tab[i][j]);
}
printf("\n");
}
或
for ( int i = 0; i < 4; i++)
{
for ( int j = 0; j < 4; j++ )
{
tab[i][j] = tab4[4 * i + j];
printf(" %d ", tab[i][j]);
}
printf("\n");
}
嘿 Whosebug 社区!
我的 C 代码中发生了一件奇怪的事情。
这里是相关代码部分:
( "tab4" 是一个 16 长的 1 维数组,用整数填充,"tab" 是一个用 0 填充的 4x4 二维数组)
我正在尝试将 tab4 的值放入 "tab"("tab" 的每一行得到 tab4 的 4 位数字)
我打印了一些来测试结果
for (int u = 0; u < 4; u++)
{
tab[0][u] = tab4[u];
printf(" %d ", tab[0][u]);
}
printf("\n");
for (int yu = 4; yu < 8; yu++)
{
tab[1][yu] = tab4[yu];
printf(" %d ", tab[1][yu]);
}
printf("\n");
for (int cont = 8; cont < 12; cont++)
{
tab[2][cont] = tab4[cont];
printf(" %d ", tab[2][cont]);
}
printf("\n");
for (int ye = 12; ye < 16; ye++)
{
tab[3][ye] = tab4[ye];
printf(" %d ", tab[3][ye]);
}
printf("\n\n");
for (int i = 0; i < 4; i++)
{
printf("\n");
for (int y = 0; y < 4; y++)
{
printf(" %d ", tab[i][y]);
}
}
printf("\n\n");
这里发生的奇怪事情是,当我逐行打印 "tab" 时,它可以工作,但是当我将它作为一个整体打印时,它却没有。
这是我的输出:
This is the array, printed line by line
16 8 4 0
8 64 0 0
0 0 0 0
0 0 0 0
here is the array printed as a whole
16 8 4 0
0 0 0 0
8 64 0 0
0 0 0 0
这可能与我收到的一些警告有关:
Severity Code Description Project File Line Suppression State Warning C6386 Buffer overrun while writing to 'tab[1]': the writable size is '16' bytes, but '20' bytes might be written.
Severity Code Description Project File Line Suppression State Warning C6385 Reading invalid data from 'tab[1]': the readable size is '16' bytes, but '20' bytes may be read.
(所有 "for" 循环的警告相同)
我知道这意味着我正在尝试写一些我不应该写的地方,但我不知道我怎么可能那样做
感谢您的回答!
循环使得
for (int yu = 4; yu < 8; yu++)
{
tab[1][yu] = tab4[yu];
printf(" %d ", tab[1][yu]);
}
不正确。数组 tab
的第二个 "row" (一维数组)具有有效索引范围 [0, 4].
所以你至少需要重写
for (int yu = 4; yu < 8; yu++)
{
tab[1][yu-4] = tab4[yu];
printf(" %d ", tab[1][yu-4]);
}
或者您可以使用以下循环填充数组选项卡
for ( int i = 0, k = 0; i < 4; i++)
{
for ( int j = 0; j < 4; j++ )
{
tab[i][j] = tab4[k++];
printf(" %d ", tab[i][j]);
}
printf("\n");
}
或
for ( int i = 0; i < 4; i++)
{
for ( int j = 0; j < 4; j++ )
{
tab[i][j] = tab4[4 * i + j];
printf(" %d ", tab[i][j]);
}
printf("\n");
}