C 检查未初始化的字符串数组中是否存在字符串
我有一个helper函数,用于确定字符串数组中是否存在字符串: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
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。那帮我省去了很多麻烦,谢谢!