C 使用 strtol 解析字符串函数参数
C Parsing String Function Argument Using 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;
}
我对如何访问给定的字符串参数感到困惑,因为字符串的变量名有一个 *
,我不太确定如何解决这个问题。
无论如何,谢谢。
无需取消引用输入参数。如果您只是删除行
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
因此在这种情况下这种取消引用是毫无意义的 - 尽管有时在函数体中取消引用指针当然有正当理由传递给那个函数。
我对 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;
}
我对如何访问给定的字符串参数感到困惑,因为字符串的变量名有一个 *
,我不太确定如何解决这个问题。
无论如何,谢谢。
无需取消引用输入参数。如果您只是删除行
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
因此在这种情况下这种取消引用是毫无意义的 - 尽管有时在函数体中取消引用指针当然有正当理由传递给那个函数。