Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c代码中获取错误号时发生编译错误_C - Fatal编程技术网

在c代码中获取错误号时发生编译错误

在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));

我试图使用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));

   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*
not
int
“我在我的代码中包含了
errorno.h
string.h
”——然后请向我们展示带有
\include
指令的代码。显示(复制和粘贴)代码总比描述代码的外观要好。(如果您真的包含了
errorno.h
,您会收到一条错误消息;它是
errno.h
),请复制并粘贴错误消息,而不是重新键入。看似微妙的细微差别可能很重要
strerror\u r
正在返回一个
char*
not
int
“我已经在我的代码中包含了
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中是否有类似的函数。