在c代码中获取错误号时发生编译错误
我试图使用strerror\r从socket函数中获取错误,但代码未编译。我获取的错误为从char*到int的invlaid转换。我在代码中包含了在c代码中获取错误号时发生编译错误,c,C,我试图使用strerror\r从socket函数中获取错误,但代码未编译。我获取的错误为从char*到int的invlaid转换。我在代码中包含了errorno.h和string.h,我正在使用运行在ubuntu 12.04上的eclipse ide。代码如下 int err; char buffer[50]; result=connect(socketHandle, (struct sockaddr *)&remoteSocketInfo, sizeof(sockaddr_in));
errorno.h
和string.h
,我正在使用运行在ubuntu 12.04上的eclipse ide。代码如下
int err;
char buffer[50];
result=connect(socketHandle, (struct sockaddr *)&remoteSocketInfo, sizeof(sockaddr_in));
if(result==0)
{
printf("\n connect success ");
}
else if(result==-1)
{
err = strerror_r(errno,buffer,50);// error in place
printf("%d",err);
}
根据,strerror\r
可以返回char*
或int
。char*
版本说它是特定于GNU的,因此如果您使用GNU,可能这就是问题所在。根据,strerror\u r
可以返回char*
或int
。char*
版本说它是特定于GNU的,所以如果您使用GNU,可能这就是问题所在。添加
Include <errno.h>
包括
我们应该解决这个问题
请注意,此错误的另一个原因可能是 它在符合XSI的系统上返回int,在GNU特定的系统上返回char*
Include <errno.h>
包括
我们应该解决这个问题
请注意,此错误的另一个原因可能是
它在符合XSI的系统上返回int,在GNU特定系统上返回char*这是因为默认情况下使用的是GNU版本的strerror\u r(),它具有以下签名:
char *strerror_r(int errnum, char *buf, size_t buflen);
您可以尝试取消定义\u GNU\u SOURCE
宏,以获取此例程的标准版本。比如:
#undef _GNU_SOURCE
#include <string.h>
上面是一个头文件(xsi_strerror_r.h)。然后在xsi_strerror_r()的源文件中提供了一个简单的实现:
#include "xsi_strerror_r.h"
int xsi_strerror_r(int errnum, char *buf, size_t buflen)
{
return strerror_r(errnum, buf, buflen);
}
然后在剩下的代码中只使用xsi_strerror_()。这是因为默认情况下使用的是strerror_()的GNU版本,它具有以下签名:
char *strerror_r(int errnum, char *buf, size_t buflen);
您可以尝试取消定义\u GNU\u SOURCE
宏,以获取此例程的标准版本。比如:
#undef _GNU_SOURCE
#include <string.h>
上面是一个头文件(xsi_strerror_r.h)。然后在xsi_strerror_r()的源文件中提供了一个简单的实现:
#include "xsi_strerror_r.h"
int xsi_strerror_r(int errnum, char *buf, size_t buflen)
{
return strerror_r(errnum, buf, buflen);
}
然后你只在剩下的代码中使用xsi_strerror_r()。
strerror_r
返回一个char*
notint
“我在我的代码中包含了errorno.h
和string.h
”——然后请向我们展示带有\include
指令的代码。显示(复制和粘贴)代码总比描述代码的外观要好。(如果您真的包含了errorno.h
,您会收到一条错误消息;它是errno.h
),请复制并粘贴错误消息,而不是重新键入。看似微妙的细微差别可能很重要strerror\u r
正在返回一个char*
notint
“我已经在我的代码中包含了errorno.h
和string.h
”——然后请向我们展示带有这些\include
指令的代码。显示(复制和粘贴)代码总比描述代码的外观要好。(如果您真的包含了errorno.h
,您会收到一条错误消息;它是errno.h
),请复制并粘贴错误消息,而不是重新键入。看似微妙的细微差别可能很重要。我看到一个函数原型返回int的地方。现在,如何获取错误号?@SanthoshPai,我不确定你在问什么-错误号作为参数传递给strerror\u r@SanthoshPai为什么不干脆printf(“错误:%d\n”,errno)代码>然后?我看到一个函数原型返回int的地方。现在,如何获取错误号?@SanthoshPai,我不确定你在问什么-错误号作为参数传递给strerror\u r@SanthoshPai为什么不干脆printf(“错误:%d\n”,errno)编码>然后?不需要#ifdef
#undef
如果宏尚未定义,则不会执行任何操作。@KeithThompson确实如此。@KeithThompson:是的,KeithThompson:是的,但我在linux中遇到了这个函数,所以想尝试一下。我一直在做win32编程,它使用WGetLastror获取套接字函数错误,因此,我想检查一下linux中是否有类似的函数。不需要#ifdef
#undef
如果宏尚未定义,则不会执行任何操作。@KeithThompson确实如此。@KeithThompson:是的,KeithThompson:是的,但我在linux中遇到了这个函数,所以我想尝试一下。我一直在做win32编程,它使用wgetlasterror获取套接字函数错误,所以想检查linux中是否有类似的函数。