开发者社区> 问答> 正文

一个指针数组打印的问题,总是报错。?报错

我的感觉就是 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
段错误 (核心已转储)
 

展开
收起
爱吃鱼的程序员 2020-06-06 21:26:40 475 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <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;
    }

     

    2020-06-06 21:26:54
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载