测试一个程序,将多个字符串数组依次遍历,找出待查找的字符串位于那个数组。
定义字符串数组的时候如下定义:
char *str1[]={"hello","world","china","Ich","Liebe"}; char *str2[]={"hehe","haha"}这里在遍历查找字符串的时候,陷入了一个思维误区。认为每个字符串数组的终止值为NULL。然后利用下面的结构进行测试:
int find_str(char **strings,char str[]) { char **temp; int i; for(i=0,temp=strings;*temp!=NULL;i++,temp++) if(!strcmp(*temp,str)) return 0; return -1 }这里出现的问题是,程序无法终止下来。查阅资料得知,以上面的形式定义字符串数组,其实并未以NULL结束。这里判断查找结束的条件要以字符串数组的长度为判定。故而对代码进行如下的修改:
#define WORD sizeof(str1)/sizeof(str1[0]) int find_str(char **strings,char str[]) { char **temp; int i,size; size=WORD; for(i=0,temp=strings;temp<strings+size;i++,temp++) if(!strcmp(*temp,str)) return 0; return -1 }如果不想使用字符串数组的长度来判定。要保持第一种方案,需要对字符串数组进行修改:
char *str1[]={"hello","world","china","Ich","Liebe",NULL}; char *str2[]={"hehe","haha",NULL}在每个字符串数组后面添加NULL终止条件,然后就可以满足第一种方案。