c - strlen 与零长度字符串不一致

标签 c strlen datastage

我正在创建一个 DataStage 并行例程,它是一个从 IBM(以前称为 Ascential)DataStage 内部调用的 C 或 C++ 函数。如果传入的字符串之一的长度为零,则失败。如果我把它放在函数的第一行:

return strlen(str);

然后它为将空值传递给 str 的调用返回 0。但是,如果我把它放在第一行......

if (strlen(str)==0) {return 0;}

然后它不返回并进入无限循环

我很困惑 - 它在测试工具中工作正常,但在 DataStage 中却不行。

也许 DataStage 将空字符串传递给 C 例程的方式有些奇怪?

int pxStrFirstCharList(char *str, char *chars )
{
  if (strlen(str)==0) {return 0;}
  if (strlen(chars)==0) {return 0;}
  int i = 0;
  //Start search
  while (str[i]) //for the complete input string
  {
    if (strchr(chars, str[i]))
    {
      return i+1;
    }
    ++i;
  }
  return 0;
}

最佳答案

你正在做的事情有一个内置函数,它叫做 strcspn。此函数接受两个字符串,并在第一个字符串中搜索第二个字符串中任何字符的第一次出现。

我建议使用那个而不是 RYO...

http://www.cplusplus.com/reference/clibrary/cstring/strcspn/

关于c - strlen 与零长度字符串不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8269980/

相关文章:

sql-server - 将6000个表和数据从sql server复制到oracle ==>最快的方法?

C 为双指针赋值

c - 在编译器的哪个阶段检测到标识符名称过长的错误?

C:string 在 malloc 和 strcpy 之间被损坏

c++ - strlen() 不适用于字符串变量

java - 如何从 Java 客户端启动 DataStage 作业 ETL?

c - 编译代码块时出错

c - *** 检测到 glibc *** realloc() : invalid old size

php - 如何strlen多语言字符串