字符数组的初始化字符串过长。

4

我一直都在收到这个错误: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个回答

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" }

@Raptrex 没关系,我相信我们都经历过这种情况。 - Quintin Robinson
2
相邻的字符串字面量连接非常方便 - 当您打算使用它时。但是,如果您不打算使用它,则可能会导致令人困惑的问题。 - Jonathan Leffler

4

看起来您忘记添加逗号。初始化一个char*数组的方式如下:

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

除此之外,您可以使用一组std::string来避免很多麻烦:

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

好主意!我会保存这个向量以备下次使用 :) - xtofl

2

您正在将一个大字符串输入到数组中。您需要用逗号分隔字符串。


请确保您的最长字符串不超过24个字符,因为还需要一个终止0。 - user3458

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
};

现在数组只是一组指针(并以空指针结尾),循环可以像这样:
char *ptr = NULL;
int i;
for (i = 0; array[i] != NULL; i++)
{
        ptr = strstr(array[i], search);
        if (ptr != NULL)
                cout << array[i];
}

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


1
sizeof(array)/sizeof(array[0]) - ulidtko

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