【发布时间】:2014-12-28 09:35:03
【问题描述】:
我正在做一个项目,由于某种原因,我无法让strtol() 将char * 转换为整数。我有这个代码:
int main(int argc, char *argv[]) {
//socket initialization code...
struct sockaddr_in addr;
char *buffer;
receivePacket(&sock, &buffer, &addr); //function i have written to receive a packet
char *temp;
int times = (int) strtol(buffer, &temp, 10);
}
当我运行它时,times 总是以 0 结束,并且 temp 返回垃圾:
(gdb) print buffer
$1 = 0xbefff648 "1"
(gdb) print times
$2 = 0
(gdb) print temp
$3 = 0xbefff648 "H\366\377\276(\207"
我不明白为什么 strtol 无法理解我给它的东西。
在receivePacket:
void receivePacket(int *sock, char **buffer, long *tx, struct sockaddr_in *cliaddr) {
//socket related code, initializations, etc.
char temp[10] = { 0 };
n = recvfrom(*sock, temp, 10, 0, (struct sockaddr *) &cliAddr, &clilen);
*buffer = temp;
}
这是问题所在吗?谢谢。
【问题讨论】:
-
您的调试器输出不可能是真实的。
buffer和temp都指向同一个地址,属于同一种类型,但返回的值不同。那是不可能的。请再次执行这些并提供真实的输出。 -
建议:1)确保在从套接字读取之前为“缓冲区”分配空间(!!!),以及 2)检查“errno”。
-
更新:您正在将缓冲区...读入局部变量。当函数终止时......缓冲区现在无效!!!!糟糕,糟糕,糟糕!
-
@Codo 这是真正的输出。我想这一定是因为
receivePacket中的*buffer = temp