我在C中创建一个单词搜索程序,它接受用户输入,然后选择一个全局单词数组并使用它来生成单词搜索。当我只使用其中一个全局数组而不是选择时,它可以工作,我想复制类别数组的内容,具体取决于用户对newArray的选择,可以与单词搜索一起使用。该程序在此刻输入选项后崩溃,这就是我所拥有的。
switch(choice)
{
case 1: choseArray(newArray, massEffect);
break;
case 2: choseArray(newArray, fallout3);
break;
case 3: choseArray(newArray, elderScrolls);
break;
case 4: choseArray(newArray, gameOfThrones);
break;
case 5: choseArray(newArray, breakingBad);
break;
default: printf("Enter a valid option!");
}
void choseArray(char** newArray, char** category)
{
int i;
for(i=0;i<6;i++)
{
strcpy(newArray[i], category[i]);
}
}
数组看起来像这样,现在全局声明
char gameOfThrones[6][250] = {"KINGSLANDING", "TYRIAN", "STARK", "LANISTERS", "WESTEROS", "WINTERFELL"};
char breakingBad[6][250] = {"JESSE", "WALT", "HEISENBERG", "SAUL", "GUSTAVO", "BREAKFAST"};
char newArray[6][250];
答案 0 :(得分:3)
你没有得到编译器警告吗?尝试声明函数以匹配传递的参数。
#include <stdio.h>
#include <string.h>
void choseArray(char newArray[][250], char category[][250]){
int i;
for(i=0;i<6;i++)
strcpy(newArray[i], category[i]);
}
int main()
{
char gameOfThrones[6][250] = {"KINGSLANDING", "TYRIAN", "STARK", "LANISTERS", "WESTEROS", "WINTERFELL"};
char breakingBad[6][250] = {"JESSE", "WALT", "HEISENBERG", "SAUL", "GUSTAVO", "BREAKFAST"};
char newArray[6][250];
choseArray(newArray, gameOfThrones);
return 0;
}
你这样做的方式
char **newArray
是指向指针的指针,或指针数组。
答案 1 :(得分:2)
如果您在此表单中声明单词列表......
char gameOfThrones[6][250] = { ... };
然后它们是char
s的数组数组。函数参数类型char **
是指向char
指针的指针,甚至不能直接比较。你的编译器应该对此有所了解。
假设newArray
与基本单词列表的类型相同,您应该声明您的函数:
void choseArray(char newArray[][250], char category[][250]) { ... }
......或者可能是这样:
void choseArray(char (*newArray)[250], char (*category)[250]) { ... }
...匹配实际的参数类型。在这种情况下,你的函数体可能按原样运行。