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

C 检查未初始化的字符串数组中是否存在字符串,c,arrays,string,initialization,exists,C,Arrays,String,Initialization,Exists,我有一个helper函数,用于确定字符串数组中是否存在字符串: 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; } ret

我有一个helper函数,用于确定字符串数组中是否存在字符串:

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

我想在myArray上调用exists_in(),但这会给我一个segfault 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;
}
char*myArray[100]={NULL};//用空值初始化数组
//(使用此构造将所有元素初始化为0)
...
布尔存在于(字符*字符串,字符*数组[],大小)
{
尺寸i;
对于(i=0;i
如果将数组从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;
}
char*myArray[100]={NULL};//用空值初始化数组
//(使用此构造将所有元素初始化为0)
...
布尔存在于(字符*字符串,字符*数组[],大小)
{
尺寸i;
对于(i=0;i
通过添加更多实用功能扩展已接受的答案

bool store_in(char *string, char *array[], size_t size);
bool delete_in(char *string, char *array[], size_t size);
测试程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h> // bool C99

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("Exists:  %s\n", array[i]);
            return true; // exists
        }
    }
    return false;
}

bool store_in(char *string, char *array[], size_t size)
{
    size_t i;
    for(i = 0; i < size; ++i)
    {
        if (array[i] == 0)
        {
            array[i] = string;

            printf("Storing: %s\n", array[i]);
            return true; // stored
        }
    }
    return false;
}

bool delete_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("Delete:  %s\n", array[i]);
            array[i] = NULL;
            return true; // deleted
        }
    }
    return false;
}


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

   //1.
   if (! exists_in("123", my_array, 100) ) // Does not exists 
       store_in("123",my_array, 100);      // It will store 
   printf("\n");

   //2.      
   if (! exists_in("123", my_array, 100))  // Exists
       store_in("123",my_array, 100);      // It will not store 
   printf("\n");    

    //3.
   if (exists_in("123", my_array, 100))  
       delete_in("123",my_array, 100);     // It will delete
    printf("\n");   

    //4.   
    if (! exists_in("123", my_array, 100)) // Does not exists 
       store_in("123",my_array, 100);     // It will store

    return (0);
}

通过添加更多实用程序函数扩展已接受的答案

bool store_in(char *string, char *array[], size_t size);
bool delete_in(char *string, char *array[], size_t size);
测试程序:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h> // bool C99

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("Exists:  %s\n", array[i]);
            return true; // exists
        }
    }
    return false;
}

bool store_in(char *string, char *array[], size_t size)
{
    size_t i;
    for(i = 0; i < size; ++i)
    {
        if (array[i] == 0)
        {
            array[i] = string;

            printf("Storing: %s\n", array[i]);
            return true; // stored
        }
    }
    return false;
}

bool delete_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("Delete:  %s\n", array[i]);
            array[i] = NULL;
            return true; // deleted
        }
    }
    return false;
}


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

   //1.
   if (! exists_in("123", my_array, 100) ) // Does not exists 
       store_in("123",my_array, 100);      // It will store 
   printf("\n");

   //2.      
   if (! exists_in("123", my_array, 100))  // Exists
       store_in("123",my_array, 100);      // It will not store 
   printf("\n");    

    //3.
   if (exists_in("123", my_array, 100))  
       delete_in("123",my_array, 100);     // It will delete
    printf("\n");   

    //4.   
    if (! exists_in("123", my_array, 100)) // Does not exists 
       store_in("123",my_array, 100);     // It will store

    return (0);
}

请注意,
if
语句的大括号丢失。Doh。那帮我省去了很多麻烦,谢谢!请注意,
if
语句的大括号丢失。Doh。那帮我省去了很多麻烦,谢谢!