即使字符串转换成功,测试也会errno
返回一个指示错误的值:
#include <stdlib.h>
#include <sys/errno.h>
const char* numberString = "7";
char* endPtr;
errno = 0;
long number = strtol(numberString, &endPtr, 10);
NSLog(@"%ld", number);
if (errno) {
perror("string to integer conversion failed");
}
输出是(在模拟器上,iOS 7)
$ 2014-05-22 09:27:32.954 Test[2144:60b] 7
$ string to integer conversion failed: No such process
设备上的行为类似。
的手册页在评论中strtol
说:
返回值
strtol()、strtoll()、strtoimax() 和 strtoq() 函数返回转换结果,除非值会下溢或溢出。如果无法执行转换,则返回 0 并将全局变量 errno 设置为 EINVAL(最后一个功能不能在所有平台上移植)。如果发生上溢或下溢,则将 errno 设置为 ERANGE,并根据下表限制函数返回值。
目前还不清楚这对 iOS 究竟意味着什么。这里有什么见解吗?
编辑:
原来,函数调用NSLog
确实 set errno
。所以,@Mat 在他的回答和评论中说得很对,说“在errno
调用不相关的函数后进行测试时,所有的赌注都被取消了(这里NSLog
)。