|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
它原型是这样
long int strtol(const char *nptr, char **endptr, int base);
我看书上和各种教学贴里都是说,第二个参数endptr是一个指向指针的指针,它指向的那个指针指向第一个非法字符的地址
可是我看帖子中和书上使用的时候,都是把它声明为一个指针,然后第一个非法字符的地址直接作为实参传递给它
虽然我知道这样子简单一些,可是原型不应该是这样的呀,求解答
网上找的一个例子
char buffer[20]="10379cend$3";
char *stop;
printf("%d/n",strtol(buffer, &stop, 2));
printf("%s/n", stop);
输出结果:
2
379cend$3
char *stop;
strtol(buffer,&stop,2);
是在说把stop声明为一个指向char类型数据的指针,然后strtol会把一个地址传递给它吧
这样的话为什么原型里形参要是指针的指针,直接是个指针不就行了吗...
你说第二个参数为什么不直接就是一个char *类型是吧, 然后外面定义一个char* stop 把stop传进去,你是这个意思吧。
因为函数里面要给stop指针赋值,使它指向第一个非数字的字符。如果直接传进去一个stop 修改的是stop的副本,没法修改到函数外面的stop变量
只有定义成char** endptr 然后通过&stop传进去以后,strtol函数里面 通过 *(&stop) =非数字字符的地址 ,才能真正的把stop修改掉
试想如果一个int a=1这样的变量 怎么传给一个函数,使函数里面能修改掉变量a 呢 ?
是不是得这样定义 void update(int * v){ *v=2;} 然后通过这样调用函数 update(&a) ;
所以你说的strtol 也一样啊 ,要修改掉char * stop这样的指针变量 那函数只能定义成char** endptr ,再外面通过传进去&stop , 所以、明白了吗?
这其实就是老生常谈的问题,要修改掉函数外面的变量,通过传递变量的指针进去。
|
|