user-0 提问: 实在找不到 大家快来吧 ！

回复:
user: user-0
content: 引用 15 楼 baijiaheizhiganmao 的回复:输出结果是：llo，至于对不对就是你程序的问题了。 嗯嗯 谢谢 ， 应该是编译器的问题 还有一个问题是 我main函数 里面的 参数 写错了 应该是 int argc,char const* argv[]

user: user-1
content: [Error] 'strcasestr' was not declared in this scope  这个提示很清楚了，strcasestr这个没有定义 不知道是结构体还是数组，在使用之前要定义。

user: user-2
content: 引用 1 楼 bear234 的回复:#define _GNU_SOURCE   #include <string.h>  要在include string.h前define下那个东西  注意顺序不能颠倒   就是说必须先define再include string.h  不能先include再define 用g++编译试下

user: user-3
content: 输出结果是：llo，至于对不对就是你程序的问题了。

user: user-3
content: 你的这个程序要使用GCC编译，编译过程和结果如下：  注意，提示第一行是默认就存在的，不需要特地指定。

user: user-0
content: 引用 7 楼 u013163178 的回复:http://www.cppblog.com/range/archive/2011/10/09/157888.html  感谢啊， 不过还是不行啊。 好像是函数没有定义

user: user-0
content: 引用 5 楼 focuslight 的回复:加    using namespace std;  谢谢 ， 好像说的是函数没有定义

user: user-0
content: 引用 10 楼 jacksonfan 的回复:[Error] 'strcasestr' was not declared in this scope  这个提示很清楚了，strcasestr这个没有定义 不知道是结构体还是数组，在使用之前要定义。   是啊 ， 他说函数没有定义， 我是加了 #include<string.h>的啊？

user: user-4
content: 引用 4 楼 zwt520123 的回复:[quote=引用 1 楼 bear234 的回复:]   #define _GNU_SOURCE   #include <string.h>  要在include string.h前define下那个东西  注意顺序不能颠倒   就是说必须先define再include string.h  不能先include再define // 首先感谢你的回答  但是还是不能啊 。	[Error] 'strcasestr' was not declared in this scope 还是这个[/quote]  我也是在网上帮你随便搜了下 你自己再找找

user: user-5
content: /** FUNCTION 	<<strcasestr>>---case-insensitive character string search  INDEX 	strcasestr  ANSI_SYNOPSIS 	#include <string.h> 	char *strcasestr(const char *<[s]>, const char *<[find]>);  TRAD_SYNOPSIS 	#include <string.h> 	int strcasecmp(<[s]>, <[find]>) 	char *<[s]>; 	char *<[find]>;  DESCRIPTION 	<<strcasestr>> searchs the string <[s]> for 	the first occurrence of the sequence <[find]>.  <<strcasestr>> 	is identical to <<strstr>> except the search is 	case-insensitive.  RETURNS  	A pointer to the first case-insensitive occurrence of the sequence 	<[find]> or <<NULL>> if no match was found.  PORTABILITY <<strcasestr>> is in the Berkeley Software Distribution.  <<strcasestr>> requires no supporting OS subroutines. It uses tolower() from elsewhere in this library.  QUICKREF 	strcasestr */  /**-  * Copyright (c) 1990, 1993  *	The Regents of the University of California.  All rights reserved.  *  * The quadratic code is derived from software contributed to Berkeley by  * Chris Torek.  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  * 1. Redistributions of source code must retain the above copyright  *    notice, this list of conditions and the following disclaimer.  * 2. Redistributions in binary form must reproduce the above copyright  *    notice, this list of conditions and the following disclaimer in the  *    documentation and/or other materials provided with the distribution.  * 4. Neither the name of the University nor the names of its contributors  *    may be used to endorse or promote products derived from this software  *    without specific prior written permission.  *  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  * SUCH DAMAGE.  */ /** Linear algorithm Copyright (C) 2008 Eric Blake  * Permission to use, copy, modify, and distribute the linear portion of  * software is freely granted, provided that this notice is preserved.  */  #include <sys/cdefs.h>  #include <ctype.h> #include <string.h>  #if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) # define RETURN_TYPE char * # define AVAILABLE(h, h_l, j, n_l)			\   (!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l))	\    && ((h_l) = (j) + (n_l))) # define CANON_ELEMENT(c) tolower (c) # define CMP_FUNC strncasecmp # include "str-two-way.h" #endif  /**  * Find the first occurrence of find in s, ignore case.  */ char * strcasestr(s, find) 	const char *s, *find; { #if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)    /** Less code size, but quadratic performance in the worst case.  */ 	char c, sc; 	size_t len;  	if ((c = *find++) != 0) { 		c = tolower((unsigned char)c); 		len = strlen(find); 		do { 			do { 				if ((sc = *s++) == 0) 					return (NULL); 			} while ((char)tolower((unsigned char)sc) != c); 		} while (strncasecmp(s, find, len) != 0); 		s--; 	} 	return ((char *)s);  #else /** compilation for speed */    /** Larger code size, but guaranteed linear performance.  */   const char *haystack = s;   const char *needle = find;   size_t needle_len; /** Length of NEEDLE.  */   size_t haystack_len; /** Known minimum length of HAYSTACK.  */   int ok = 1; /** True if NEEDLE is prefix of HAYSTACK.  */    /** Determine length of NEEDLE, and in the process, make sure      HAYSTACK is at least as long (no point processing all of a long      NEEDLE if HAYSTACK is too short).  */   while (*haystack && *needle)     ok &= (tolower ((unsigned char) *haystack++) 	   == tolower ((unsigned char) *needle++));   if (*needle)     return NULL;   if (ok)     return (char *) s;   needle_len = needle - find;   haystack = s + 1;   haystack_len = needle_len - 1;    /** Perform the search.  */   if (needle_len < LONG_NEEDLE_THRESHOLD)     return two_way_short_needle ((const unsigned char *) haystack, 				 haystack_len, 				 (const unsigned char *) find, needle_len);   return two_way_long_needle ((const unsigned char *) haystack, haystack_len, 			      (const unsigned char *) find, needle_len); #endif /** compilation for speed */ }

user: user-6
content: http://www.cppblog.com/range/archive/2011/10/09/157888.html

user: user-6
content: #define _GNU_SOURCE #include<stdio.h> #include<string.h>  int main() {     char *result = NULL;     char s1[] = "Hello";     char s2[] = "ll";      result = strcasestr(s1,s2);     if(result != NULL)         printf("%s\n",result);      return 0; } http://blog.chinaunix.net/uid-553033-id-119986.html

user: user-7
content: 加    using namespace std;

user: user-0
content: 引用 1 楼 bear234 的回复:#define _GNU_SOURCE   #include <string.h>  要在include string.h前define下那个东西  注意顺序不能颠倒   就是说必须先define再include string.h  不能先include再define // 首先感谢你的回答  但是还是不能啊 。	[Error] 'strcasestr' was not declared in this scope 还是这个

user: user-0
content: 引用 2 楼 Evankaka 的回复:/** FUNCTION 	<<strcasestr>>---case-insensitive character string search  INDEX 	strcasestr  ANSI_SYNOPSIS 	#include <string.h> 	char *strcasestr(const char *<[s]>, const char *<[find]>);  TRAD_SYNOPSIS 	#include <string.h> 	int strcasecmp(<[s]>, <[find]>) 	char *<[s]>; 	char *<[find]>;  DESCRIPTION 	<<strcasestr>> searchs the string <[s]> for 	the first occurrence of the sequence <[find]>.  <<strcasestr>> 	is identical to <<strstr>> except the search is 	case-insensitive.  RETURNS  	A pointer to the first case-insensitive occurrence of the sequence 	<[find]> or <<NULL>> if no match was found.  PORTABILITY <<strcasestr>> is in the Berkeley Software Distribution.  <<strcasestr>> requires no supporting OS subroutines. It uses tolower() from elsewhere in this library.  QUICKREF 	strcasestr */  /**-  * Copyright (c) 1990, 1993  *	The Regents of the University of California.  All rights reserved.  *  * The quadratic code is derived from software contributed to Berkeley by  * Chris Torek.  *  * Redistribution and use in source and binary forms, with or without  * modification, are permitted provided that the following conditions  * are met:  * 1. Redistributions of source code must retain the above copyright  *    notice, this list of conditions and the following disclaimer.  * 2. Redistributions in binary form must reproduce the above copyright  *    notice, this list of conditions and the following disclaimer in the  *    documentation and/or other materials provided with the distribution.  * 4. Neither the name of the University nor the names of its contributors  *    may be used to endorse or promote products derived from this software  *    without specific prior written permission.  *  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF  * SUCH DAMAGE.  */ /** Linear algorithm Copyright (C) 2008 Eric Blake  * Permission to use, copy, modify, and distribute the linear portion of  * software is freely granted, provided that this notice is preserved.  */  #include <sys/cdefs.h>  #include <ctype.h> #include <string.h>  #if !defined(PREFER_SIZE_OVER_SPEED) && !defined(__OPTIMIZE_SIZE__) # define RETURN_TYPE char * # define AVAILABLE(h, h_l, j, n_l)			\   (!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l))	\    && ((h_l) = (j) + (n_l))) # define CANON_ELEMENT(c) tolower (c) # define CMP_FUNC strncasecmp # include "str-two-way.h" #endif  /**  * Find the first occurrence of find in s, ignore case.  */ char * strcasestr(s, find) 	const char *s, *find; { #if defined(PREFER_SIZE_OVER_SPEED) || defined(__OPTIMIZE_SIZE__)    /** Less code size, but quadratic performance in the worst case.  */ 	char c, sc; 	size_t len;  	if ((c = *find++) != 0) { 		c = tolower((unsigned char)c); 		len = strlen(find); 		do { 			do { 				if ((sc = *s++) == 0) 					return (NULL); 			} while ((char)tolower((unsigned char)sc) != c); 		} while (strncasecmp(s, find, len) != 0); 		s--; 	} 	return ((char *)s);  #else /** compilation for speed */    /** Larger code size, but guaranteed linear performance.  */   const char *haystack = s;   const char *needle = find;   size_t needle_len; /** Length of NEEDLE.  */   size_t haystack_len; /** Known minimum length of HAYSTACK.  */   int ok = 1; /** True if NEEDLE is prefix of HAYSTACK.  */    /** Determine length of NEEDLE, and in the process, make sure      HAYSTACK is at least as long (no point processing all of a long      NEEDLE if HAYSTACK is too short).  */   while (*haystack && *needle)     ok &= (tolower ((unsigned char) *haystack++) 	   == tolower ((unsigned char) *needle++));   if (*needle)     return NULL;   if (ok)     return (char *) s;   needle_len = needle - find;   haystack = s + 1;   haystack_len = needle_len - 1;    /** Perform the search.  */   if (needle_len < LONG_NEEDLE_THRESHOLD)     return two_way_short_needle ((const unsigned char *) haystack, 				 haystack_len, 				 (const unsigned char *) find, needle_len);   return two_way_long_needle ((const unsigned char *) haystack, haystack_len, 			      (const unsigned char *) find, needle_len); #endif /** compilation for speed */ }  这是什么意思？  是定义函数 。 麻烦能不能说清楚一下。

user: user-4
content: #define _GNU_SOURCE   #include <string.h>  要在include string.h前define下那个东西  注意顺序不能颠倒   就是说必须先define再include string.h  不能先include再define