我正在尝试将带有字符串的2D数组传递给函数。我一直在接受 在令牌之前的预期表达。
此代码的要点是阅读wordsearch拼图,然后找到该拼图中的单词。我将编写一个函数用于前向搜索,后向搜索,然后上下搜索。
如何摆脱此错误?错误在我称之为前向功能的最底部发生故障。
/*Andrea Hatfield CPE 101 October 31st, 2012*/
#include <stdio.h>
#include <string.h>
int forward(char words[][8], char puzzle[][11]);
int main()
{
char puzzle[11][11];
char words[8][8];
FILE *fin, *fwords;
int i = 0;
int j= 0;
fin = fopen("puzzle.in", "r");
fwords = fopen("words.in", "r");
if(fin == NULL) /*Reads in the puzzle file*/
printf("File does not exist");
else
{
while(fscanf(fin,"%s", puzzle[i])!=EOF)
{
printf("%s\n", puzzle[i]);
i++;
}
}
if(fwords == NULL) /*Reads in the words the puzzle will search for */
printf("File does not exist");
else
{
while(fscanf(fwords, "%s", words[j])!=EOF)
{
printf("%s\n", words[j]);
}
}
forward(&words[][8], &puzzle[][11]); /*Error at this point*/
return(0);
}
答案 0 :(得分:5)
要做你想做的事有点困难,但这里有一个问题:
forward(&words[][8], &puzzle[][11]);
试试这个:
forward(words, puzzle);
以下是here中应提及的其他两个选项:
#define ROWS 4
#define COLS 5
void func(int array[ROWS][COLS]) {
int i, j;
for (i=0; i<ROWS; i++) {
for (j=0; j<COLS; j++) {
array[i][j] = i*j;
}
}
}
void func_vla(int rows, int cols, int array[rows][cols]) {
int i, j;
for (i=0; i<rows; i++) {
for (j=0; j<cols; j++) {
array[i][j] = i*j;
}
}
}
int main() {
int x[ROWS][COLS];
func(x);
func_vla(ROWS, COLS, x);
}
答案 1 :(得分:3)
您需要直接致电
forward(words, puzzle);
但是,您的代码中有错误:您在阅读j++
时忘记了阅读周期中的words
,因此您覆盖了words[0]
而未初始化其他成员阵列。
此外,在实际情况中,您可能会发现在运行时选择数组大小是可取的。一个简单的方法是为宽度和高度选择一个相当大的限制,并使用0x90的解决方案(你需要一个30x20的拼图,你可以很容易地处理它,因为你编译ROWS和COLS相等比方说,1024)。
更复杂的方法是使用malloc()
(使用指向字符的指针)并动态分配两个数组,受可用内存的限制;然后,您可以将其维度传递给forward
函数。
int forward(char **words, char **puzzle, size_t w_w, size_t w_h, size_t p_w, size_t p_h)
{
}
然而,鉴于对malloc()
的循环调用以及每次检查其返回值以拦截内存不足情况的需要,分配部分会更复杂;此外,在某些情况下,您可能希望内存被 de 分配(例如,运行重复的谜题),这会导致进一步的复杂性。