一个有关计算结构体数组大小的问题

 这个程序的做的事情,输入一个字符串,然后用折半查找法查找这个字符串是否在已存在的程序中。

主要目的是联系结构体数组;

#include <stdio.h>
#include <string.h>

struct key{
     char *word;
     int count;
}keytab[8]={
{"auto",0},
{"define",0},
{"main",0},
{"message", 0},
{"printf",0},
{"pthread",0},
{"sizeof",0}
};

int binsearch(char * g_char, struct key keytab[], int key_num)
{
int low = 0;
int high = key_num -1;
int mid ;
int out ;
while(high >= low)
{
mid = (low+high) / 2;
out = strcmp(g_char, keytab[mid].word) ;
if(out > 0)
{
low = mid+1;
}
else if(out < 0)
{
high = mid-1;
}
else
{
return 0;
}
}
return -1;
}

int main(void)
{
int err;
char get_char[10];
int key_num=0;
#if 0
while(strcmp(keytab[key_num].word,"")!= NULL)
key_num++;
#endif

key_num = (sizeof keytab/sizeof(struct key));
printf("word is %s\n",keytab[7].word);
printf("Please input you want to find word\n");
scanf("%s",get_char);
err = binsearch(get_char, keytab,key_num);
if(err == 0)
{
printf("Find the word\n");
}
else
printf("Sorry not find your word\n");
return 0;
}

因为假设不知道结构体数组,我想用下面的代码实现算出数组的大小,可是总是报段错误。后来

用gdb进行调试,才知道。这个函数本来有7个数组元素,本来没有keytab[7]这个元素的,系统不知道

数组元素已经完成他会一直进行下去。keytab[7]={0x00,0x00};keytab[8]={0x00,0x00};当key_num>6时,

就要进行keytab[7].word 与“”进行比较了。这就存在操作0x00这个地址了。所以报段错误了。
#if 0
while(strcmp(keytab[key_num].word,"")!= NULL)
key_num++;
#endif

可以进行的改进是while(keytab[key_num++].word != NULL)

来代替上面的代码,这样是一个解决问题的办法

但是C程序设计语言书中给出了更高明的算法:key_num = ( sizeof keytab/(sizeof key));

这是个有关字符串指针赋值的问题。呵呵……就到这里吧
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值