我有一个辅助函数,用于确定字符串数组中是否存在字符串:
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 :(得分:4)
如果您将数组从0填充到size
,请使用size-1
表示有效条目的数量。
如果数组未连续填充,或者您可能希望之后从中删除项目,请在每个元素中使用NULL
初始化第一个“空”数组。 (如果稍后将其删除,请不要忘记将元素重置回NULL
。)
然后在NULL
:
strcmp
上添加显式测试
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;
}
答案 1 :(得分: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);
}
输出:
Storing: 123
Exists: 123
Exists: 123
Delete: 123
Storing: 123