2016-05-17 61 views
-8

我遇到问题。工作的strstr这种方式:无法运行strstr

char *ret; 
char buff[200]; 

while(fgets(buff, 300, fp)) { 

    //printf("%s", buff); 

    if(ret = strstr(buff, "E")) break; 
    } 
    printf("%s", ret); 

但是,它给了我一个分段错误是这样的:

我读了用户的输入与函数getline()。 例如:用户写入“Word”。所以字[0]是'W'字[1]是'o'等。

char *ret; 
char buff[200]; 

    while(fgets(buff, 300, fp)) { 


      if(ret = strstr(buff, s[0])) break; 
      } 
      printf("%s", ret); 

问题是什么?它是一样的,但它不工作..

+3

所以,你读了300个标志为200的符号阵列,对不对? –

+2

什么是's'? –

+0

用户输入..... –

回答

0

看来,s[0]有型号char。如果是这样,您需要使用strchr而不是strstr

if ((ret = strchr(buff, s[0]))) break; 

或者如果你想使用strstr那么你可以将它与复合文字结合起来。例如

if ((ret = strstr(buff, (char[]) { s[0], '\0' }))) break; 

而且在循环之后你应该检查ret应该循环

if (ret) printf("%s", ret); 

之前被初始化为NULL还考虑到,爱好者帐户只有200个字符

char buff[200]; 

但您正尝试读取300个字符

while(fgets(buff, 300, fp)) { 

这将是更好只是写

while(fgets(buff, sizeof(buff), fp)) { 
+0

这(strchr)的作品,谢谢你。 –

+0

@GáborMicskó完全没有。:) –