gpt4 book ai didi

在 C 代码中获取错误号时出现编译错误

转载 作者:太空宇宙 更新时间:2023-11-04 06:01:08 24 4
gpt4 key购买 nike

我正在尝试使用 strerror_r 从套接字函数中获取错误,但代码未编译。我收到的错误是 invlaid conversion from char * to an int。我在我的代码中包含了 errorno.hstring.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);
}

最佳答案

这是因为默认使用 GNU 版本的 strerror_r(),它具有以下签名:

char *strerror_r(int errnum, char *buf, size_t buflen);

您可以尝试取消定义 _GNU_SOURCE 宏以获得此例程的标准版本。像这样的东西:

#undef _GNU_SOURCE
#include <string.h>

将它隔离到它自己的头文件(如 xsi_strerror_r.h)中可能是个好主意,这样您就可以只在需要的地方包含它。或者甚至是围绕 strerror_r() 的包装函数,以便取消定义 _GNU_SOURCE 不会产生其他意想不到的影响。例如:

#ifndef XSI_STRERROR_R
#define XSI_STRERROR_R

#undef _GNU_SOURCE
#include <string.h>

int xsi_strerror_r(int errnum, char *buf, size_t buflen);

#endif

以上是头文件 (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()。

关于在 C 代码中获取错误号时出现编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19321600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com