【问题标题】:use of strchr() giving error [closed]使用 strchr() 给出错误 [关闭]
【发布时间】:2014-02-08 06:39:38
【问题描述】:

我试图找出一个字符串(s1)的字符在另一个字符串(s2)中的出现。

这是我的代码的一部分。

for(;i<strlen(s1);i++)
{
   int x=strchr(s2,s1[i]);
   if(x>0)
   count++;
}

但是在编译时我得到一个指向 strchr() 的错误并说

error: invalid conversion from ‘char*’ to ‘int’ [-fpermissive]

谁能解释一下使用 strchr() 函数有什么问题。

【问题讨论】:

  • 问题是你没有阅读它的文档。我想知道当你知道你不知道它在做什么时,你为什么曾经尝试使用一个函数...

标签: c++ strchr


【解决方案1】:

分配错误 strchr 不返回 int 而是返回找到的字符串中第一个字符的地址:

int x=strchr(s2,s1[i]);

应该是:

char* x = strchr(s2, s1[i]); 
//         ^ returns char* 

阅读手册

char *strchr(const char *s, int c);

返回值
strchr()strrchr() 函数 返回一个指向匹配字符的指针或NULL如果字符 没有找到。终止的空字节被认为是 字符串,因此如果 c 指定为 '\0',这些函数将返回 指向终止符的指针。

所以:

if(x>0)

应该是:

if(x != NULL)

或者只是if(x)

【讨论】:

  • 如何返回字符串中字符的位置??
  • @user3160274 如果你想使用strchr() 那么你可以使用指针差异ptrdiff_t index = x - s2 虽然你应该使用ptrdiff_t
  • @user3160274 检查这个工作 C 代码@codepad
  • 有没有更快的函数可以用来获取字符串中字符的位置?
  • @user3160274 我不知道,但你可以自己写:int indexof(char* str, char c){ int index = 0; while(*str &amp;&amp; *str != c) index++; return index;}
猜你喜欢
  • 2013-06-04
  • 1970-01-01
  • 2019-02-19
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多