-1

我正在尝试将此字符串转换"09195462965"为 int,但遇到了问题。

我的代码片段:

int n, p, pnum=0;
char buffer[256];
char *endptr;
long pnumber;

bzero(buffer,256);
p = read(sock,buffer,255);

    pnumber = strtol(buffer, &endptr, pnum);

printf("n: %ld",pnumber);

p = write(sock,buffer,sizeof(buffer));

客户端发送一个字符串,"09195462965"然后服务器接收它。

现在在服务器上,该字符串必须转换为intie 09195462965

注意:服务器将数字作为字符串发送。

4

2 回答 2

3

您使用strtol()不正确,最后一个参数应该是您想要的基础。例如,如果您想以 10 为底(十进制)存储该数字:

long pnumber;
pnumber = strtol("09195462965", NULL, 10); //nst char *nptr is "09195462965"
                                           //char **endptr  is null
                                           //int base       is 10 for decimal
printf("n: %ld",pnumber);

>> 9195462965

确保您阅读了您正在使用的功能的手册页。

传递pnum(设置为0)作为你对最后一个参数所做的事情会导致它吐回“0”,因为你传入的数字。

09195462965 有 0-9 的数字(所以我假设你想要 dec)如果你传入“0”到strtol()然后它会首先看到它0并且会处理这个数字有八进制,问题是八进制数字从 0- 7,因此对于八进制数来说,9 是“超出范围”的,因此会strtol()吐回 0。

像这样的数字: ,当它是 0 时07175462765你可以传入。pnum

于 2012-11-25T15:50:40.690 回答
1

那太大了,装不下int。尝试strtoumax将其存储在uintmax_t.

uintmax_t pnumber = strtoumax(buffer, &endptr, 10);
if (pnumber == UINTMAX_MAX && errno == ERANGE)
    /* Too big. */

或者,如果你没有,strtoumax你可以试试strtoullet al。

于 2012-11-25T15:30:46.537 回答