c - 使用 strchr 和 strtol 在一行中读取可变数量的 long int

标签 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。

最佳答案

strtol() 返回:

On success, the function returns the converted integral number as a long int value. If no valid conversion could be performed, a zero value is returned (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

关于c - 使用 strchr 和 strtol 在一行中读取可变数量的 long int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15177994/

相关文章:

c - 查找 argv[] 中的重复字符

c - 试图在一个字符之后复制字符串的其余部分

无法读取 utmpx 文件

c - 在 for 循环中使用结构的问题

c - strtol帮助为什么它返回0

c - strtol 未按预期工作

c++ - 该标准是否定义了共同基础?

c++ - 一个类似于子集求和的算法的C/C++实现

c - 使用 getchar() 和 putchar() 用数组输入和输出一组字符

c - C 中除了转义字符之外的第一次出现