【问题标题】:initializer-string for array of chars is too long字符数组的初始化字符串太长
【发布时间】:2010-12-14 10:53:49
【问题描述】:

我不断收到此错误:字符数组的初始化字符串太长 即使我将 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;
}

【问题讨论】:

    标签: c++ arrays char


    【解决方案1】:

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

    【讨论】:

    • 并确保您的最长字符串不超过 24 个字符,因为终止 0 还需要一个字符。
    【解决方案2】:

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

    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 它发生了,我相信我们都去过那里。
    • 相邻字符串文字连接非常方便 - 当您打算使用它时。如果你不这样做,它可能会导致神秘的问题。
    【解决方案3】:

    你好像忘记加逗号了。初始化char* 数组是这样完成的:

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

    除此之外,您可以通过使用std::strings 的数组为自己省去很多麻烦:

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

    【讨论】:

    • 好主意!我保存vector 以备下次使用:)
    【解决方案4】:

    除了初始化程序集中缺少逗号之外,为什么不直接将其设置为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];
    }
    

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

    【讨论】:

    • sizeof(array)/sizeof(array[0]).
    猜你喜欢
    • 2014-10-16
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 2015-12-26
    • 2011-12-11
    相关资源
    最近更新 更多