我的感觉就是 while( ( string = *strings++ ) )这里有问题,可是,我该如何修改呢?
代码如下:
#include<stdio.h>
#define TRUE 1
#define FALSE 0
int find_char(char **,char);
void main()
{
char *array[5]={"hello","world","liu","jun","haha"};
find_char(array,'l');
}
int
find_char( char **strings, char value )
{
char *string; /* the string we're looking at */
while( ( string = *strings++ ) ){
printf("11\n");
printf("string:%s\n",string);
}
return FALSE;
}
输出结果是:
11
string:hello
11
string:world
11
string:liu
11
string:jun
11
string:haha
11
段错误 (核心已转储)
<ol>
<li>在C语言中,NULL 表示 空、没有值、或 已经定义过这个变量 但是没有给这个变量赋值。</li>
<li>众所周知,用字符'\0'表示一个字符串的结束。 </li>
<li>由于每个字符串的首地址,可以用一个指针来引荐,那么表示一个字符串数组的结束,就要求将最后一个指针置空(NULL)。同时, 这个指针算是这个字符串数组的最后一个元素。</li>
<li>你的问题就出在初始化这个字符串数组的时刻,你没有为这个数组安排结束指针NULL。</li>
<li>你的这个字符串数组的长度,算上 NULL 元素,是 6。 但初始化时,可以不注明字符串数组的长度。</li>
修改后的代码如下:
#include<stdio.h>
#define TRUE 1
#define FALSE 0
int find_char(char **,char);
void main(){
char *array[]={"hello","world","liu","jun","haha", NULL};
printf("字符串数组 array 的长度是:%d\n",sizeof(array)/sizeof(array[0]));
find_char(array,'l');
}
int find_char( char **strings, char value ) {
char *string; /* the string we're looking at */
while( ( string = *strings++ ) ){
printf("11\n");
printf("string:%s\n",string);
}
return FALSE;
}
<div class='ref'><h4>引用来自“tcxu”的评论</h4><ol>
<li>在C语言中,NULL 表示 空、没有值、或 已经定义过这个变量 但是没有给这个变量赋值。</li>
<li>众所周知,用字符'\0'表示一个字符串的结束。 </li>
<li>由于每个字符串的首地址,可以用一个指针来引荐,那么表示一个字符串数组的结束,就要求将最后一个指针置空(NULL)。同时, 这个指针算是这个字符串数组的最后一个元素。</li>
<li>你的问题就出在初始化这个字符串数组的时刻,你没有为这个数组安排结束指针NULL。</li>
<li>你的这个字符串数组的长度,算上 NULL 元素,是 6。 但初始化时,可以不注明字符串数组的长度。</li>
修改后的代码如下:
#include<stdio.h>
#define TRUE 1
#define FALSE 0
int find_char(char **,char);
void main(){
char *array[]={"hello","world","liu","jun","haha", NULL};
printf("字符串数组 array 的长度是:%d\n",sizeof(array)/sizeof(array[0]));
find_char(array,'l');
}
int find_char( char **strings, char value ) {
char *string; /* the string we're looking at */
while( ( string = *strings++ ) ){
printf("11\n");
printf("string:%s\n",string);
}
return FALSE;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。