草庐IT

strerror_l

全部标签

c++ - 当我在测试期间手动设置 errno 时,strerror_r 返回垃圾

在测试期间,我有一个模拟对象,它设置了errno=ETIMEDOUT;我正在测试的对象看到错误并调用strerror_r取回错误字符串:if(ret){if(ret==EAI_SYSTEM){charerr[128];strerror_r(errno,err,128);err_string.assign(err);}else{err_string.assign(gai_strerror(ret));}returnret;}我不明白为什么strerror_r返回垃圾。我什至试过打电话strerror_r(ETIMEDOUT,err,128)直接但仍然有垃圾。我肯定错过了什么。看来我得到的

【C语言】超详解strncpy&&strncat&&strncmp&&strerror&&perror的使⽤和模拟实现

🌈writeinfront:🔍个人主页:@啊森要自信的主页✏️真正相信奇迹的家伙,本身和奇迹一样了不起啊!欢迎大家关注🔍点赞👍收藏⭐️留言📝>希望看完我的文章对你有小小的帮助,如有错误,可以指出,让我们一起探讨学习交流,一起加油鸭。文章目录📝前言🌠库函数strncpy🌉strncpy模拟实现🌠strncat函数的使⽤🌉strncat模拟实现🌠strncmp函数的使⽤🌉strncmp模拟实现🌠strerror🌉perror🚩总结📝前言本小节,阿森继续和你一起学习5个字符串函数:strncpy,strcnat,strncmp的使用和两种模拟实现方法,他们和strcpy等函数比较多了一个n,实现方法

c - GetLastError()、errno、FormatMessageA() 和 strerror_s()?

我对GetLastError()和errno之间的确切关系感到困惑。它们是相同的数值,还是完全不同的东西?我怎么知道我应该检查哪一个?如果我想将错误代码转换为字符串进行调试,我可以将FormatMessageA()与strerror_s()互换使用吗?最后,WSAGetLastError()是否总是返回与GetLastError()相同的值,还是它们都返回不同的值? 最佳答案 GetLastError和errno没有关系。GetLastError获取由WindowsAPI函数(针对当前线程)设置的最后一个错误,而errno包含由C运

strtok,strerror,memcpy,memmove,memcmp,memset详细解析及模拟实现

​​​​​​​🐶博主主页:@ᰔᩚ.一怀明月ꦿ ❤️‍🔥专栏系列:线性代数,C初学者入门训练,题解C,C的使用文章🔥座右铭:“不要等到什么都没有了,才下定决心去做”🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀目录🐰strtok🐰strerror🐰memcpy🐰模拟实现memcpy🐰memmove🐰模拟实现memmove🐰memcmp🐰memset🐰strtokstrtok用于字符串的拆分,引用头文件为#includestrtok的原型:char*strtok(char*str,constchar*delimiters);str:字符串的首地址 delimiters:分隔符

c - strerror 描述字符串

C函数strerror返回错误描述字符串,详见here.示例字符串Nosuchfileordirectory问题是这些字符串在哪里定义的?我查看了我的头文件,但没有看到任何东西。 最佳答案 包含错误消息的头文件名为errmsg.h00012constchar*constsys_errlist[]={00013"Operationsucceeded",/*0*/00014"Invalidargument",/*EINVAL*/00015"Badmemoryaddress",/*EFAULT*/00016"Stringtoolong",

c - strerror 描述字符串

C函数strerror返回错误描述字符串,详见here.示例字符串Nosuchfileordirectory问题是这些字符串在哪里定义的?我查看了我的头文件,但没有看到任何东西。 最佳答案 包含错误消息的头文件名为errmsg.h00012constchar*constsys_errlist[]={00013"Operationsucceeded",/*0*/00014"Invalidargument",/*EINVAL*/00015"Badmemoryaddress",/*EFAULT*/00016"Stringtoolong",

c++ - Windows 操作系统的 strerror_r 的替代 api

我看到strerror_r(...)VisualC++2008不再支持API,可能是因为线程安全问题。我想在我的程序中使用类似的功能。是否有任何其他winapi与strerror_r(..)做同样的事情? 最佳答案 你可以试试strerror_s.它似乎是线程安全的。注意strerror_s的参数顺序与strerror_r不同。如果编写可移植代码,您可能需要使用定义#definestrerror_r(errno,buf,len)strerror_s(buf,len,errno) 关于c+

c - 带有 MinGW-w64 的 strerror

采用这个简单的程序#include#include#includeintmain(void){printf("ERROR%d%s\n",ETIMEDOUT,strerror(ETIMEDOUT));return0;}如果你用Cygwingcc编译它,它运行良好$gcca.c$./aERROR116Connectiontimedout如果你用MinGW-w64gcc编译它,它不会给出正确的错误信息$i686-w64-mingw32-gcca.c$./aERROR138Unknownerror如何让MinGW-w64放置正确的错误消息? 最佳答案

c++ - 在 Alpine Linux 上错误地声明了 strerror_r

我正在使用strerror_r在日志记录辅助函数中。如手册页所述,此函数有两个版本。POSIX版本返回一个int。GNU版本返回一个字符串(char*)。因此,为了让我的C++代码更具可移植性,我有一段与此类似的代码:charbuffer[1000];intsize=1000;intresult=0;char*msg=buffer;buffer[0]='\0';#ifdef_GNU_SOURCEmsg=strerror_r(err,buffer,size);#elseresult=strerror_r(err,buffer,size);if(result!=0){sprintf(buf

c - 如何在当前语言环境下使用 strerror_l?

我正在修复一些使用strerror(非线程安全)进行多线程处理的Linux代码。我发现strerror_r和strerror_l都是线程安全的。由于strerror_r的不同定义(取决于_GNU_SOURCE它有不同的定义)我想使用较新的strerror_l函数,但是如何我应该获取当前语言环境的locale_t对象吗?我没有使用iconv或其他任何东西,只是普通的libc,而且我不知道如何获得“默认语言环境”对象(我不关心用什么语言打印错误,我只想要一个人类可读的字符串。) 最佳答案 如果您将""传递给locale参数,newloc
12