gpt4 book ai didi

c - 带有用户输入的二维数组

转载 作者:太空宇宙 更新时间:2023-11-04 02:40:20 25 4
gpt4 key购买 nike

我正在制作一个填字游戏网格,用户首先输入网格的尺寸,然后每行以空格或回车分隔。该程序接受每一行并将该行的每个字母放在网格 [][] 上的一个点上。到目前为止,我只设法使我的网格适用于 4x4 或更小的尺寸,如果我把它做得更大,在 grid[0][i] 中找到的任何字母都会吐出垃圾。如果我在循环的每次迭代后打印网格它是正确的,但如果我返回并检查它不是。有人有什么想法吗?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main (){

int i, j, row, column;

scanf("%i", &row);
scanf("%i", &column);

char *userInput = malloc (sizeof(char)*column);
char **grid = malloc(sizeof(char)*column);

for(i=0; i<row; i++){
scanf("%s", userInput);
grid[i] = (char*) malloc (row *sizeof(char));
for (j=0; j<column; j++){
grid[i][j] = userInput[j];
}
}

// double check to see if the grid is correct.
printf("%c", grid[0][2]);

return 0;
}

最佳答案

我认为你在混合索引

  • 你为 column 分配了 char* 指针
  • 然后迭代(当它应该是时)并分配数量的char对于每个索引
  • 然后用 column 长度的字符串填充 char[row] 而不是 row

因为你正在阅读 column 字符,我假设你想要一个行 x 列矩阵,你应该做的是

int i, j, row, columnM
char** grid = malloc(row*sizeof(char*));
char* userInput = malloc(column);

for (i = 0; i < row; ++i)
{
grid[i] = malloc(column);
..
memcpy(grid[i], userInput, column);
}

实际上,您不需要在分配中使用 sizeof(char),因为标准保证 char 为 1 个字节。

请注意,无论缓冲区大小如何,scanf 都会在读取的字符串末尾写入一个 nul 终止符。所以你应该至少提供 column+1 字节来读取。这不会阻止用户输入更多字符并导致缓冲区溢出,请查看我的评论。

关于c - 带有用户输入的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32661135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com