errno會返回一個數字,每個數字代表一個錯誤類型。詳細的可以查看頭文件。/usr/include/asm/errno.h
成都創新互聯公司堅持“要么做到,要么別承諾”的工作理念,服務領域包括:成都網站設計、成都網站制作、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的富川網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
如何把errno的數字轉換成相應的文字說明?
方式一:可以使用strerrno函數
char
*strerror(int
errno)
使用方式如下:
fprintf(stderr,"error
in
CreateProcess
%s,
Process
ID
%d
",strerror(errno),processID)
將錯誤代碼轉換為字符串錯誤信息,可以將該字符串和其它的信息組合輸出到用戶界面。
注:假設processID是一個已經獲取了的整形ID
方式二:使用perror函數
void
perror(const
char
*s)
函數說明
perror
(
)用來將上一個函數發生錯誤的原因輸出到標準錯誤(stderr),參數s
所指的字符串會先打印出,后面再加上錯誤原因
字符串。此錯誤原因依照全局變量
errno
的值來決定要輸出的字符串。
另外并不是所有的c函數調用發生的錯誤信息都會修改errno。例如gethostbyname函數。
errno是否是線程安全的?
errno是支持線程安全的,而且,一般而言,編譯器會自動保證errno的安全性。
我們看下相關頭文件
/usr/include/bits/errno.h
會看到如下內容:
#
if
!defined
_LIBC
||
defined
_LIBC_REENTRANT
/*
When
using
threads,
errno
is
a
per-thread
value.
*/
#
define
errno
(*__errno_location
())
#
endif
#
endif
/*
!__ASSEMBLER__
*/
#endif
/*
_ERRNO_H
*/
也就是說,在沒有定義__LIBC或者定義_LIBC_REENTRANT的時候,errno是多線程/進程安全的。
為了檢測一下你編譯器是否定義上述變量,不妨使用下面一個簡單程序。
#include
stdio.h
#include
errno.h
int
main(
void
)
{
#ifndef
__ASSEMBLER__
printf(
"Undefine
__ASSEMBLER__/n"
);
#else
printf(
"define
__ASSEMBLER__/n"
);
#endif
#ifndef
__LIBC
printf(
"Undefine
__LIBC/n"
);
#else
printf(
"define
__LIBC/n"
);
#endif
#ifndef
_LIBC_REENTRANT
printf(
"Undefine
_LIBC_REENTRANT/n"
);
#else
printf(
"define
_LIBC_REENTRANT/n"
);
#endif
return
0;
}
這個是警告,可以不理,意思是func的返回類型有問題吧,應該是函數定義了void,但在函數里寫了,return 0;,把代碼貼出來看看。
inquire,judgeNum,judgeName這三個函數定義有問題。
最好把ATP.CPP的205行附近的代碼貼出來,看到代碼才知道是什么錯誤。
一般都是在處理文件時用到的比較多,如:
#include?stdio.h
#include?stdlib.h
int?main(void)
{
perror("File?error?");
}
#include?stdio.h
#include?stdlib.h
int?main(void){
FILE?*fp;
if((fp=fopen("test",?"rb"))==NULL)?{
printf("Cannot?open?file.\n");
exit(1);
}
putc('C',?fp);
if(ferror(fp))?{?//?檢測文件是否出錯
printf("File?Error\n");
exit(1);
}
fclose(fp);
return?0;
}
當前名稱:c語言中的error函數 c語言 error
文章源于:http://vcdvsql.cn/article12/dopghgc.html
成都網站建設公司_創新互聯,為您提供網站改版、關鍵詞優化、自適應網站、網站導航、企業建站、標簽優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯