在C语言中将一个字符串数组复制到另一个数组。

4
我正在用C语言编写一个单词查找程序,它会接收用户输入,然后选择其中一个全局数组中的单词来生成单词查找。当我仅使用其中一个全局数组时,它可以正常运行,但是在进行选择时就出现问题,我想将类别数组的内容复制到新数组中(取决于用户的选择),然后将其与单词查找一起使用。目前程序在输入选项后崩溃了,以下是我的代码:
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];

为什么不使用 void choseArray(char newArray[6][250], .... - moffeltje
1
你没有在 switch 语句的作用域中提供适用于 newArray 的声明,这非常重要。 - John Bollinger
2个回答

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

这是一个指向指针的指针,或者说是指针数组。


2
如果您以此形式声明单词列表...
char gameOfThrones[6][250] = { ... };

那么它们就是由char的数组组成的数组。函数参数类型char **是指向char指针的指针,甚至不能直接进行比较。你的编译器应该对此抛出异常。

假设newArray与基本单词列表具有相同的类型,则应该这样声明函数:

void choseArray(char newArray[][250], char category[][250]) { ... }

...或者可能像这样:

void choseArray(char (*newArray)[250], char (*category)[250]) { ... }

...以匹配实际的参数类型。如果是这种情况,您函数的主体可能已经可以正常工作。


非常感谢,我用那个方法让它工作了,现在我明白为什么了。我没有从 DevC++ 编译器收到任何警告。 - Declan Fitzpatrick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接