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

天王盖地虎626 发布于 2018/05/28 22:42
阅读 278
收藏 0

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

加载中
0
tcxu
tcxu
  1. 在C语言中,NULL 表示 空、没有值、或  已经定义过这个变量 但是没有给这个变量赋值。
  2. 众所周知,用字符'\0'表示一个字符串的结束。 
  3. 由于每个字符串的首地址,可以用一个指针来引荐,那么表示一个字符串数组的结束,就要求将最后一个指针置空(NULL)。同时, 这个指针算是这个字符串数组的最后一个元素。
  4. 你的问题就出在初始化这个字符串数组的时刻,你没有为这个数组安排结束指针NULL。
  5. 你的这个字符串数组的长度,算上 NULL 元素,是 6。 但初始化时,可以不注明字符串数组的长度。

修改后的代码如下:

#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;
}

 

0
天王盖地虎626
天王盖地虎626

引用来自“tcxu”的评论

  1. 在C语言中,NULL 表示 空、没有值、或  已经定义过这个变量 但是没有给这个变量赋值。
  2. 众所周知,用字符'\0'表示一个字符串的结束。 
  3. 由于每个字符串的首地址,可以用一个指针来引荐,那么表示一个字符串数组的结束,就要求将最后一个指针置空(NULL)。同时, 这个指针算是这个字符串数组的最后一个元素。
  4. 你的问题就出在初始化这个字符串数组的时刻,你没有为这个数组安排结束指针NULL。
  5. 你的这个字符串数组的长度,算上 NULL 元素,是 6。 但初始化时,可以不注明字符串数组的长度。

修改后的代码如下:

#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;
}

 

确实如此

返回顶部
顶部