Я создаю параллельную подпрограмму DataStage, которая представляет собой функцию C или C++, вызываемую из IBM (ранее Ascential) DataStage. Ошибка, если одна из переданных строк имеет нулевую длину. Если я поставлю это в самую первую строку функции:
return strlen(str);
затем он возвращает 0 для вызовов, которые передают пустые значения в str. Однако, если я поставлю это в первую строку...
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;
}
NULL
IIRC,strlen()
вызывает UB при вызове сNULL
аргументами. - person sbi   schedule 25.11.2011