C 使用指针访问二维数组值
我需要从stdin获取一个2d数组(网格),对字符进行一些操作,并打印一个带有更改的新网格 我的策略是使用网格[LINES][COLUMNS]创建一个Struc,然后使用getChar()使用指针将每个字符推入网格。当我在函数内打印时,它工作得很好,但我无法从外部访问值。我只得到了一些奇怪的字符,可能代表记忆地址或其他什么 下面是该程序的简化代码块C 使用指针访问二维数组值,c,arrays,pointers,C,Arrays,Pointers,我需要从stdin获取一个2d数组(网格),对字符进行一些操作,并打印一个带有更改的新网格 我的策略是使用网格[LINES][COLUMNS]创建一个Struc,然后使用getChar()使用指针将每个字符推入网格。当我在函数内打印时,它工作得很好,但我无法从外部访问值。我只得到了一些奇怪的字符,可能代表记忆地址或其他什么 下面是该程序的简化代码块 #include <stdio.h> #include <stdlib.h> #include <stdbool.h&
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
struct Grid{
char box[20][40];
};
int main(int argc, char *argv[]) {
struct Grid grid;
readInitGrid(&grid);
displayGrid(&grid);
}
void readInitGrid(struct Grid *grid) {
char c;
for (unsigned int i = 0; i < 20; i++) {
for (unsigned int j = 0; j < 40 + 1; j++) { //+1 is for the /n at the end of each line
while ((c = getchar()) != EOF) {
grid->box[i][j] = c;
printf("%c", grid->box[i][j]); //Will print correcly
}
}
}
}
void displayGrid(const struct Grid *grid) {
for (unsigned int i = 0; i < 20; ++i) {
for (unsigned int j = 0; j < 40; ++j) {
printf("%c", grid.box[i][j]); //This do not work
}
}
printf("\n");
}
#包括
#包括
#包括
#包括
结构网格{
炭盒[20][40];
};
int main(int argc,char*argv[]){
结构网格;
readInitGrid(&grid);
显示网格(&grid);
}
void readInitGrid(结构网格*Grid){
字符c;
for(无符号整数i=0;i<20;i++){
for(unsigned int j=0;j<40+1;j++){/+1表示每行末尾的/n
而((c=getchar())!=EOF){
网格->框[i][j]=c;
printf(“%c”,网格->框[i][j]);//将正确打印
}
}
}
}
void displayGrid(常量结构网格*网格){
for(无符号整数i=0;i<20;++i){
用于(无符号整数j=0;j<40;++j){
printf(“%c”,grid.box[i][j]);//这不起作用
}
}
printf(“\n”);
}
我在实际程序中向这个结构传递其他东西,我没有任何问题来访问int和char的信息。我唯一有问题的是2d数组。还有一件事,我不能用maloc来做这个 将while更改为if,以便我的for循环影响网格->框[i][j]=c
void readInitGrid(struct Grid *grid) {
char c;
for (unsigned int i = 0; i < 20; i++) {
for (unsigned int j = 0; j < 40 + 1; j++) {
if ((c = getchar()) != EOF) {
grid->box[i][j] = c;
printf("%c", grid->box[i][j]);
}
}
}
}
void readInitGrid(结构网格*Grid){
字符c;
for(无符号整数i=0;i<20;i++){
对于(无符号整数j=0;j<40+1;j++){
如果((c=getchar())!=EOF){
网格->框[i][j]=c;
printf(“%c”,网格->框[i][j]);
}
}
}
}
修复了谢谢@xingOk的问题。抱歉,这是我第一次使用stackoverflow。