for循环存入二维字符数组的数据和对应位置输出的值不一样
代码清单#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX 1024
int main()
{
char import;//定义此字符数组用于接收用户输入的数据
char export;
int i, j, num;
int k = 0;
//获取import数组的元素
fgets(import, MAX, stdin);
//获取每一行每一列应有多少个元素
num = (int)sqrt(strlen(import) - 1);
//printf("num: %d\n", num);
//将import数组的前num*num个元素存入export数组
for(i = 0; i < num; i++)
{
for(j = 0; j < num; j++)
{
*(*(export + i) + j) = import;
k++;
}
}
//输出结果
printf("export = %c\n", *(*export + 3));
printf("import = %c\n", import);
for(i = 0; i < num; i++)
{
for(j = 0; j < num; j++)
{
printf("%c ", *(*(export + i) + j));
}
printf("\n");
}
return 0;
}
描述:
输入012345678987654321的时候,第四列前三行的元素都与设定的输入的不同,eg. export在第一个循环过程中利用printf函数输出的时候时3,但是出了第一个循环之后再用printf函数输出的时候就变成了4
结果示例:
0123456789876543210
export = 4
import = 3
0 1 2 4
4 5 6 8
8 9 8 6
6 5 4 3 问题原因出在数组下标越界。因为你定义的 export 数组大小是 3x3,在嵌套循环中,当访问 export 时,已经超出了数组的范围。这会导致未定义的行为,所以你看到了错误的结果。
要修复这个问题,你可以考虑以下几个方法:
方法一:扩大 export 数组的大小。例如,将数组定义为 char export;。这会给你足够的空间来存储 16 个字符。这种方法可以让你按照输入的内容来调整数组大小。
方法二:在循环中正确访问数组元素。修改 printf 语句以访问正确的数组下标。例如,使用 printf("export = %c\n", export);。
以下是修复后的代码示例:
#include <stdio.h>
#include <string.h>
#include <math.h>
#define MAX 1024
int main()
{
char import;
char export;
int i, j, num;
int k = 0;
fgets(import, MAX, stdin);
num = (int)sqrt(strlen(import) - 1);
for(i = 0; i < num; i++)
{
for(j = 0; j < num; j++)
{
export = import;
k++;
}
}
printf("export = %c\n", export);
printf("import = %c\n", import);
for(i = 0; i < num; i++)
{
for(j = 0; j < num; j++)
{
printf("%c ", export);
}
printf("\n");
}
return 0;
}
这样,在输入 0123456789876543210 的情况下,输出应该是:
0123456789876543210
export = 3
import = 3
0 1 2 3
4 5 6 7
8 9 8 7
6 5 4 3
isdkz 发表于 2023-4-19 17:00
问题原因出在数组下标越界。因为你定义的 export 数组大小是 3x3,在嵌套循环中,当访问 export 时, ...
谢谢您!!
页:
[1]