将字符串数组复制到 C 中的另一个数组中
Copy array of strings into another array in C
我正在用 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];
您没有收到编译器警告吗?尝试声明函数以匹配传递的参数。
#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
是一个指向指针的指针,或者,一个指针数组。
如果您以这种形式声明您的单词列表...
char gameOfThrones[6][250] = { ... };
那么它们就是char
数组的数组。函数参数类型 char **
是指向 char
指针 的指针,甚至不能直接比较。您的编译器应该对此很满意。
假设 newArray
与基本单词列表属于同一类型,您应该像这样声明您的函数:
void choseArray(char newArray[][250], char category[][250]) { ... }
...或者可能是这样的:
void choseArray(char (*newArray)[250], char (*category)[250]) { ... }
... 以匹配实际参数类型。在这种情况下,您的函数主体可能会按原样工作。
我正在用 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];
您没有收到编译器警告吗?尝试声明函数以匹配传递的参数。
#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
是一个指向指针的指针,或者,一个指针数组。
如果您以这种形式声明您的单词列表...
char gameOfThrones[6][250] = { ... };
那么它们就是char
数组的数组。函数参数类型 char **
是指向 char
指针 的指针,甚至不能直接比较。您的编译器应该对此很满意。
假设 newArray
与基本单词列表属于同一类型,您应该像这样声明您的函数:
void choseArray(char newArray[][250], char category[][250]) { ... }
...或者可能是这样的:
void choseArray(char (*newArray)[250], char (*category)[250]) { ... }
... 以匹配实际参数类型。在这种情况下,您的函数主体可能会按原样工作。