我试图通过引用模拟传递,显然我做错了什么:
long int toNumber(char * input) {
char* pointer;
long int number;
number = strtol(input, &pointer, 10);
if (number == 0L) {
return -1337;
} else {
input = pointer;
return number;
}
}
我喜欢这个函数返回输入的值并修剪它的转换开头,但是当我尝试调用它时,即使整数转换完美无缺,字符串保持不变。感谢您提供任何帮助。
编辑:
char* input = "123 456";
long int number = toNumber(input);
编辑2:改回来,抱歉。 我希望它可以像这样工作: input = 123 456 - > number = 123,input = 456 - > number = 456,input = NULL
答案 0 :(得分:1)
input
是一个指针,它通过值传递给toNumber
函数。为input
赋值只会更改参数对象,该对象是函数的本地对象。它对来电者没有影响。
要修改字符串,您必须修改*input
或input[some_index]
,或将input
传递给将修改其指向的数据的其他函数。
请注意,更新字符串不一定是个好主意。您可以修改组成字符串的字符,但不能增加包含该字符串的数组的大小。如果调用者传递一个字符串文字,那么尝试修改它有未定义的行为(并且可能会使程序崩溃)。
答案 1 :(得分:1)
目前尚不清楚1337的事情......但是,这段代码应该产生问题代码尝试简化逻辑的内容。
long int toNumber(char **input)
{
char *pointer;
long int number;
number = strtol(input, &pointer, 10);
if(number)
*input = pointer;
else
number = (1337);
return number;
}
如下所示调用上述函数:
{
char *test="123 456";
long int n;
...
n = toNumber(&test);
printf("n[%ld] remainder[%s]\n", n, test);
...
}
哪个应该打印:
n[123] remainder[ 456]