一个函数越界的问题

yukiooy 2012-04-13 06:26:53

写了一道练习程序,大体思路是按照《C和指针》程序的6.2写的。如果find_char(q,'a')函数传入的是已有的数值,比如本例,则程序能够正常执行,否则不能,比如find_char(q,'w')。该程序编译能够通过,我找了半天也不知道哪里出错了。后来一步一步的跟踪,说是
while((string=*strings++)!=NULL)
这句话越界了。不知道问题在哪里,因为我没有看到什么越界的地方。
请诸位大神多多指教。

#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0

int str_len(char* string);
int find_char(char** strings,char value);
/*
*
*/
int main(int argc, char** argv) {


char* s1="a";


char* q[1]={"a"};


int flag=find_char(q,'w');

printf("value %s found\n",(flag ? "was" : "was not"));
return (EXIT_SUCCESS);
}
int str_len(char* string)
{
int length=0;
while(*string++!='\0')
{
++length;
}
return length;
}
int find_char(char** strings,char value)
{
char* string;
while((string=*strings++)!=NULL)
{
while(*string!='\0')
{
if(*string++==value)
{
return TRUE;
}
}
}
return FALSE;
}
...全文
169 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
yukiooy 2012-04-14
  • 打赏
  • 举报
回复
多谢诸位达人~~~
evencoming 2012-04-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
这里为什么要++?

C/C++ code
((string=*strings++)!=NULL)

是因为++出错吗?
[/Quote]
应该说 string 是一个二级指针。而你判断它指向的内容是不是空来判断释放结束。
所以,必须等有个结束符 才运行结束。
而你之前哪个代码明显没结束符(这里是NULL).
所以一直读取,知道 访问越界。

类似
char str[1]={'a'};
strlen(str);
一样
「已注销」 2012-04-13
  • 打赏
  • 举报
回复
这里为什么要++?
((string=*strings++)!=NULL)

是因为++出错吗?
fishion 2012-04-13
  • 打赏
  • 举报
回复
char* q[1]={"a"};

这个没有结束符,所以你用结束符判断循环就出错
evencoming 2012-04-13
  • 打赏
  • 举报
回复
char* q[1]={"a"};
=>
char* q[2]={"a",NULL};
//对应这句: while((string=*strings++)!=NULL)


69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧