字符数组的初始化字符串太长

时间:2009-11-08 21:24:27

标签: c++ arrays char

我不断收到此错误:字符数组的初始化字符串太长 即使我将num和length更改为1,它仍然会出错:

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    const int num = 11;
    const int length = 25;
    char array[num][length] = { "Becky Warre, 555-1223"
                                "Joe Looney, 555-0097"
                                "Geri Palmer, 555-8787"
                                "Lynn Presnell, 555-1212"
                                "Holly Gaddis, 555-8878"
                                "Sam Wiggins, 555-0998"
                                "Bob Kain, 555-8712"
                                "Tim Haynes, 555-7676"
                                "Warren Gaddis, 555-9037"
                                "Jean James, 555-4939"
                                "Ron Palmer, 555-2893" };

    char search[length];
    cout << "Enter a string to search: ";
    cin.getline(search, length);

    char *ptr = NULL;
    int i;
    for (i = 0; i < num; i++)
    {
        ptr = strstr(array[num], search);
        if (ptr != NULL)
            cout << array[i];
    }
    if (ptr == NULL)
        cout << "No match found" << endl;

    return 0;
}

4 个答案:

答案 0 :(得分:11)

我认为这是因为你的数组初始化中没有任何逗号......

char array[num][length] = { "Becky Warre, 555-1223",
                            "Joe Looney, 555-0097",
                            "Geri Palmer, 555-8787",
                            "Lynn Presnell, 555-1212",
                            "Holly Gaddis, 555-8878",
                            "Sam Wiggins, 555-0998",
                            "Bob Kain, 555-8712",
                            "Tim Haynes, 555-7676",
                            "Warren Gaddis, 555-9037",
                            "Jean James, 555-4939",
                            "Ron Palmer, 555-2893" }

答案 1 :(得分:4)

好像你忘记添加逗号了。初始化char*数组的方式如下:

char entries [number_of_items][lenght]  = { "entry1", "entry2", .... };

除此之外,使用std::string s数组可以省去很多麻烦:

std::string entries[] = { "entry1", "entry2", ... };

答案 2 :(得分:2)

您在阵列中输入一个大字符串。你需要用逗号分隔字符串。

答案 3 :(得分:1)

除了初始化程序集中缺少的逗号之外,为什么不跳过使它成为char的二维数组呢?您只是将数组数据传递给strstr(),并且它想要的只是空终止字符串。为什么不使用更灵活的:

char* array[] = { 
    "Becky Warre, 555-1223",
    "Joe Looney, 555-0097",
    "Geri Palmer, 555-8787",
    "Lynn Presnell, 555-1212",
    "Holly Gaddis, 555-8878",
    "Sam Wiggins, 555-0998",
    "Bob Kain, 555-8712",
    "Tim Haynes, 555-7676",
    "Warren Gaddis, 555-9037",
    "Jean James, 555-4939",
    "Ron Palmer, 555-2893",
    NULL
};

既然数组只是一组指针(并且它以NULL指针终止),循环可能看起来像:

char *ptr = NULL;
int i;
for (i = 0; array[i] != NULL; i++)
{
        ptr = strstr(array[i], search);
        if (ptr != NULL)
                cout << array[i];
}

这样做的一个优点是您可以向数据添加新字符串,而无需更新任何相应的“大小”数字。而且你永远不必担心编译器抱怨数组在一个维度或另一个维度上太小 - 它只会使数组成为它所需的大小。