使用strchr和strtol在一行中读取可变数量的长整数

时间:2013-03-02 18:39:39

标签: c strtol strchr

我的功能尚未完成,但我要做的是:

  • 读入以空格分隔的数字串。
  • 从该字符串中提取数字。
  • 将它们转换为长整数。
  • 返回读入的数字。

    int input( int a, int b, long int *result_array )
    {
        int ele = 0;
        char buffer[200];
        char *start, *end;
    
        scanf("%[^\n]%*c", buffer );
    
        start = buffer;
    
        while( ( end = ( strchr( start, ' ' ) ) != NULL ) )
        {
            result_array = strtol( start, &end, 10 );
            ele += 1;
            start = end + 1;
    
    
        }
    
        return ele;
    }
    

它似乎没有正常工作,我认为我使用了strchr错误。

1 个答案:

答案 0 :(得分:1)

strtol()返回:

  

成功时,该函数将转换后的整数作为long int值返回。      如果无法执行有效转换,则返回零值(0L)。

你应该把你的代码写成:

end = buffer;
base = 10;
long int = li;
ele = 0;
while(li=strtol (end,&end, base)){
     ele += 1;
}
return ele;

您无需明确使用strstr()来查找下一个整数。 strtol()足够聪明,每次转换后,它都会将终点定位到下一个int。

我写了一个正在运行的代码可能对你有帮助:

#include <stdio.h>      /* printf */
#include <stdlib.h>     /* strtol */
int main (){
  char buffer[] = "2001 11 223   444   566";
  char * end;
  long int li;
  end =buffer;
  int base =10;
  int ele = 0;
  while(li=strtol (end, &end, base)){
     printf("%ld \n", li);
     ele += 1;
  }
  printf("\nNo of elements: %d", ele);
  return 0;
}

其输出:

2001 
11 
223 
444 
566 

No of elements: 5

Link to codepad