检查字符串是否存在于未初始化的字符串数组中

标签 c arrays string initialization exists

我有一个辅助函数来确定一个字符串是否存在于字符串数组中:

bool exists_in(char *string, char *array[], int size){
    int i;
    for(i = 0; i < size; ++i){
        if(strcmp(string, array[i]) == 0)
            printf("%s\n", array[i]);
            return true;
    }
    return false;
}

基本上,如果数组中没有元素,我想将其放入数组中。我如何使用未初始化为其中包含值的数组来执行此操作?

char *myArray[100] // initailize array

我想在 myArray 上调用 exists_in(),但这会给我一个段错误 11,因为 myArray 中没有值。

最佳答案

如果您将数组从 0 填充到 size-1,则使用 size 指示有效条目的数量。

如果数组不是连续填充的,或者如果您以后可能想从中删除项目,请在每个元素中使用 NULL 初始化第一个“空”数组。 (如果您稍后删除某个元素,请不要忘记将其重置为 NULL。)

然后在 strcmp 之前的循环中添加对 NULL 的显式测试:

char *myArray[100] = { NULL }; // initialize array with NULL
// (all elements will be initialized to 0 with this construction)

...

bool exists_in(char *string, char *array[], size_t size)
{
    size_t i;
    for(i = 0; i < size; ++i)
    {
        if (array[i] && strcmp(string, array[i]) == 0)
        {
            printf("%s\n", array[i]);
            return true;
        }
    }
    return false;
}

关于检查字符串是否存在于未初始化的字符串数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48254750/

相关文章:

代码仍然在没有任何包含的情况下运行(Bloodshed 的 Dev-C++)

c - 具有未定义数据大小的位反转的最有效算法

java - Java 中的菜单字符

php - Mysql子查询多结果

java - 如何从 InputStream 中准确读取 4 个字节?

python - 使用python分割json中的字符串

ios - swift 不能用 String 调用 isKindOfClass

c++ - 修改PIN中的申请说明

c - 从c中的字符串数组中获取第一个字符串

c - 为什么访问数组中的元素需要常数时间?