C使用strtol

时间:2017-01-12 03:55:57

标签: c parsing strtol

我对C有点新意,想了解一些关于使用指针和解除引用访问函数参数的事情。

这是我的代码,程序的重点是使用strtol解析给定参数,只用两个数字用空格分隔。

int sum(const char *input){
  char *input = input_line;   // dereference the address passed into the function to access the string
  int i; // store sum in here
  char *rest; // used as second argument in strtol so that first int can be added to i
  i = strtol(input, &rest, 10); // set first int in string to i
  i += strtol(rest, &rest, 10); // add first and second int
  return i;
}

我很困惑如何访问给定的字符串参数,因为字符串的变量名称为*,而且我不太清楚如何解决这个问题。

无论如何,谢谢。

1 个答案:

答案 0 :(得分:3)

无需取消引用输入参数。如果你只是放弃

char *input = input_line; 

(这不是反正引用它的正确方法),代码将起作用。您正在向sum传递指向char的指针,这正是strol的第一个参数应该是。

一个简单的测试:

#include <stdio.h>
#include <stdlib.h>

int sum(const char *input){
  int i; // store sum in here
  char *rest; // used as second argument in strtol so that first int can be added to i
  i = strtol(input, &rest, 10); // set first int in string to i
  i += strtol(rest, &rest, 10); // add first and second int
  return i;
}

int main(void){
    char* nums = "23 42";
    printf("%d\n",sum(nums)); 
    return 0;
}

按预期打印65

就解除引用的机制而言:如果由于某种原因你真的想要取消引用传递给sum的指针,你会做这样的事情(在sum内):

char ch; // dereferencing a char* yields a char
ch = *input; // * is the dereference operator 

现在ch将保留输入字符串中的第一个字符。根本没有理由将个人char传递给strol,因此这种解除引用在这种情况下是毫无意义的 - 尽管有时在函数体中解除引用指针的有效理由传递给该函数。