C语言find_char出现段异常

elson1024 发布于 2013/11/27 10:42
阅读 524
收藏 0
int find_char(char **strings, char v){
    char *string = NULL;
    while((string = *strings++) != NULL){
        while(*string != '\0'){
            if(*string++ == v){
                return 1;
            }
        }
    }
    return 0;
}


int main(void){
    char *string1 = "hello";
    char *string2 = "world";
    char *string3 = "php";

    char *str[3] = {string1, string2, string3};
    char **strings = str;


    if(find_char(strings, 'a')){//改为p就没事,因为php里面找得到p,a找不到,出现问题
        printf("Yes ! \n");
    }else{
        printf("No ! \n");
    }

    return 0;
}

//难道是指针越界?我两个while都做了判断



加载中
0
Morgan_
Morgan_

int find_char(char **strings, int n, char v) // n :the length of strings
{
 if ( strings == NULL)
  return 0;
 char *string = NULL;
 int i = 0;
 while( i < n)
 {
  string = strings[i];
  int j = 0;
  while( string[j++] != '\0')
  {
   if( string[j] == v)
    return 1;
   
  }

i++; 
 }
 return 0;
}

 

0
狼来了而已
狼来了而已

while((string = *strings++) != NULL)

这边错了

0
雪让
雪让
#include <stdio.h>
#include <stdlib.h>

int find_char(char **strings, char v){
	char *string = NULL;
	while((string = *strings++) != NULL){
		while(*string != '\0'){
			if(*string++ == v){
				return 1;
			}
		}
	}
	return 0;
}

int main(int argc, char *argv[]){
	char *string1 = "hello";
	char *string2 = "world";
	char *string3 = "php";

	char *str[3] = {string1, string2, string3};
	char **strings = str;

	if(argc != 2)
	{
		printf("Arguments error.\n");
		return(0);
	}
	if(find_char(strings, argv[1][0])){
		printf("Yes ! \n");
	}else{
		printf("No ! \n");
	}

	return 0;
}

$ gcc find_char.c -o find_char 

$ gcc --version
gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3)
Copyright (C) 2010 Free Software Foundation, Inc.

何来段错误?



0
Morgan_
Morgan_
因为你的*String代表的是以该地址以后的所有字符,而不是一个字符。于是你的循环会在某些值上一直循环,知道String指向非法地址,然后对非法地址进行*String,就出现了段异常。
0
elson1024
elson1024
多谢楼上所有的解答,我先去调试下
返回顶部
顶部