欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

多次使用庫函數(shù)編寫c語言,c語言編寫的每個函數(shù)都可以進(jìn)行

c語言庫函數(shù)用什么編寫的?

C語言的標(biāo)準(zhǔn)庫函數(shù)一般都是用C語言編寫的。

成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供屯溪企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、成都網(wǎng)站設(shè)計、成都外貿(mào)網(wǎng)站建設(shè)成都h5網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為屯溪眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。

Linux系統(tǒng)上可以參考glibc的源碼,清一色的c源碼。

Windows系統(tǒng)上可以參考VC6的C標(biāo)準(zhǔn)庫源碼。

C語言庫函數(shù)如何編寫?

/***

*printf.c - print formatted

*

* Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.

*

*Purpose:

* defines printf() - print formatted data

*

*******************************************************************************/

#include

#include

#include

#include

#include

#include

#include

/***

*int printf(format, ...) - print formatted data

*

*Purpose:

* Prints formatted data on stdout using the format string to

* format data and getting as many arguments as called for

* Uses temporary buffering to improve efficiency.

* _output does the real work here

*

*Entry:

* char *format - format string to control data format/number of arguments

* followed by list of arguments, number and type controlled by

* format string

*

*Exit:

* returns number of characters printed

*

*Exceptions:

*

*******************************************************************************/

int __cdecl printf (

const char *format,

...

)

/*

* stdout ''PRINT'', ''F''ormatted

*/

{

va_list arglist;

int buffing;

int retval;

va_start(arglist, format);

_ASSERTE(format != NULL);//斷言宏。如果輸出格式字符串指針為空,則在DEBUG版下斷言,報告錯誤。

_lock_str2(1, stdout);

buffing = _stbuf(stdout);//stdout:指定輸出到屏幕

retval = _output(stdout,format,arglist);

_ftbuf(buffing, stdout);

_unlock_str2(1, stdout);

return(retval);

}

以上為printf()的源代碼

1、從含有可選參數(shù)函數(shù)中獲得可選參數(shù),以及操作這些參數(shù)

typedef char *va_list;

void va_start( va_list arg_ptr, prev_param );

type va_arg( va_list arg_ptr, type );

void va_end( va_list arg_ptr );

假定函數(shù)含有一個必選參數(shù)和多個可選參數(shù),必選參數(shù)聲明為普通數(shù)據(jù)類型,且能通過參數(shù)名來獲得該變量的值。可選參數(shù)通過宏va_start、va_arg和va_end(定義在stdarg.h或varargs.h中)來進(jìn)行操作,即通過設(shè)置指向第一個可選參數(shù)指針、返回當(dāng)前參數(shù)、在返回參數(shù)后重新設(shè)置指針來操作所有的可選參數(shù)。

va_start:為獲取可變數(shù)目參數(shù)的函數(shù)的參數(shù)提供一種便捷手段。設(shè)置arg_ptr為指向傳給函數(shù)參數(shù)列表中的第一個可選參數(shù)的指針,且該參數(shù)必須是va_list類型。prev_param是在參數(shù)列表中第一個可選參數(shù)前的必選參數(shù)。

va_arg:返回由arg_ptr所指向的參數(shù)的值,且自增指向下一個參數(shù)的地址。type為當(dāng)前參數(shù)的類型,用來計算該參數(shù)的長度,確定下一個參數(shù)的起始位置。它可以在函數(shù)中應(yīng)用多次,直到得到函數(shù)的所有參數(shù)為止,但必須在宏va_start后面調(diào)用。

va_end:在獲取所有的參數(shù)后,設(shè)置指針arg_ptr為NULL。

下面舉例說明:

#include

#include

int average( int first, ... );

void main( void )

{

/* Call with 3 integers (-1 is used as terminator). */

printf( "Average is: %d\n", average( 2, 3, 4, -1 ) );

/* Call with 4 integers. */

printf( "Average is: %d\n", average( 5, 7, 9, 11, -1 ) );

/* Call with just -1 terminator. */

printf( "Average is: %d\n", average( -1 ) );

}

int average( int first, ... )

{

int count = 0, sum = 0, i = first;

va_list marker;

va_start( marker, first ); /* Initialize variable arguments. */

while( i != -1 )

{

sum += i;

count++;

i = va_arg( marker, int);

}

va_end( marker ); /* Reset variable arguments. */

return( sum ? (sum / count) : 0 );

}

返回值為:

Average is: 3

Average is: 8

Average is: 0

綜上所述,在printf()函數(shù)中,可以只輸出一個字符串,也可按照一定的形式輸出含有多個可選參數(shù)的字符串信息。因此,首先就要通過這些宏來獲取所有的可選參數(shù)。在上面的源碼可以看出printf()中,只使用了宏at_start,將可選參數(shù)的首地址賦給了arglist。

2、鎖定字符串及輸出字符串到屏幕

#define _lock_str2(i,s) _lock_file2(i,s)

void __cdecl _lock_file2(int, void *);

#define _unlock_str2(i,s) _unlock_file2(i,s)

void __cdecl _unlock_file2(int, void *);

int __cdecl _stbuf(FILE *);

void __cdecl _ftbuf(int, FILE *);

int __cdecl _output(FILE *, const char *, va_list);

在output函數(shù)中,讀取格式字符串中的每一個字符,然后對其進(jìn)行處理,處理方式根據(jù)每一個字符所代表的意義來進(jìn)行,如:普通字符直接利用函數(shù)WRITE_CHAR(ch, charsout);輸出到控制臺。

其中的主要部分是對轉(zhuǎn)換說明符(d,c,s,f)的處理,現(xiàn)在將對其中的部分代碼進(jìn)行詳細(xì)說明,這里只說明最基本的轉(zhuǎn)換說明符,對這些須基本的轉(zhuǎn)換說明符進(jìn)行修飾的修飾符,程序中單獨(dú)進(jìn)行處理。下面是函數(shù)output()(output.c)部分源代碼:

case ST_TYPE:

//表示當(dāng)前處理的字符的類型為轉(zhuǎn)換說明符。

...

switch (ch) {

//下面對參數(shù)的獲取都是利用宏va_arg( va_list arg_ptr, type );來進(jìn)行的。

case ''c'': {

//從參數(shù)表中獲取單個字符,輸出到緩沖字符串中,此時,type=int

buffer[0] = (char) get_int_arg(argptr); /* get char to print */

text = buffer;

textlen = 1; /* print just a single character */

}

break;

case ''s'': {

//從參數(shù)表中獲取字符串,輸出到緩沖字符串中,此時,type=char*

int i;

char *p; /* temps */

text = get_ptr_arg(argptr);

...

}

break;

case ''w'': {

//對寬字符進(jìn)行處理

...

} /* case ''w'' */

break;

...

case ''e'':

case ''f'':

case ''g'': {

//對浮點(diǎn)數(shù)進(jìn)行操作

...

#if !LONGDOUBLE_IS_DOUBLE

/* do the conversion */

if (flags FL_LONGDOUBLE) {

_cldcvt((LONGDOUBLE*)argptr, text, ch, precision, capexp);

va_arg(argptr, LONGDOUBLE);

//對長雙精度型進(jìn)行處理,此時,type=long double

}

else

#endif /* !LONGDOUBLE_IS_DOUBLE */

{

//對雙精度型進(jìn)行處理,此時,type=double

_cfltcvt((DOUBLE*)argptr, text, ch, precision, capexp);

va_arg(argptr, DOUBLE);

}

...

break;

//對整型變量處理

case ''d'':

case ''i'':

...

goto COMMON_INT;

case ''u'':

radix = 10;

goto COMMON_INT;

case ''p'':

...

goto COMMON_INT;

case ''o'':

...

注:對于浮點(diǎn)型double和long double,有相應(yīng)的轉(zhuǎn)換說明符(%f表示雙精度型,%lf表示長雙精度型),而float卻沒有。其中的原因是,在KRC下,float值用于表達(dá)式或用作參數(shù)前,會自動轉(zhuǎn)換成double類型。而ANSI C一般不會自動把float轉(zhuǎn)換成double。有些程序已假定其中的float參數(shù)會被轉(zhuǎn)換成double,為了保護(hù)大量這樣的程序,所有printf()函數(shù)的float參數(shù)還是被自動轉(zhuǎn)換成double型。因此,在KRC或ANSI C下,都無需用特定的轉(zhuǎn)換說明符來顯示float型。

綜上所述,轉(zhuǎn)換說明符必須與待打印字符的類型。通常,用戶有種選擇。例如,如要打印一個int類型的值。則只可以使用%d,%x或%o。所有這些說明符都表示要打印一個int類型的值;它們只不過提供了一個數(shù)值的幾種不同表示。類似一,可以用%f、%g和%e來表示double類型的值。但如果轉(zhuǎn)換說明與類型不匹配,將會出現(xiàn)意想不到的結(jié)果。為什么呢?問題就在于C向函數(shù)傳遞信息的方式。

這個失敗的根本細(xì)節(jié)與具體實(shí)現(xiàn)相關(guān)。它決定了系統(tǒng)中的參數(shù)以何方式傳遞。函數(shù)調(diào)用如下:

float n1;

double n2;

long n3;

long n4;

...

printf("%ld,%ld,%ld,%ld",n1,n2,n3,n4);

這個調(diào)用告訴計算機(jī),要把變量n1,n2,n3和n4的值交給計算機(jī),它把這些變量放進(jìn)稱作棧(stack)的內(nèi)存區(qū)域中,來完成這一任務(wù)。計算機(jī)把這些值放進(jìn)棧中,其根據(jù)是變量的類型而不是轉(zhuǎn)換說明符,比如n1,把8個字節(jié)放入棧中(float被轉(zhuǎn)換成double),類似地,為n2放了8字節(jié),其后給n3和n4各放了4個字節(jié)。接著,控制的對象轉(zhuǎn)移到printf();此函數(shù)從棧中讀數(shù),不過在這一過程中,它是在轉(zhuǎn)換說明符的指導(dǎo)下,讀取數(shù)值的。說明符%ld指定printf()應(yīng)讀4個字節(jié)(va_arg( va_list arg_ptr, type )中type=long),因此printf()讀入棧中的4個字節(jié),作為它的第一個值。但是這只是n1的前半部分,這個值被看成一個long整數(shù)。下一個說明符%ld讀入4個字節(jié),這正是n1的后半部分,這個值被看成第二個long整數(shù)。類似地,第三、第四次又讀入n2的前后兩部分。因此,盡管我們對n3和n4使用了正確的說明符,printf()仍然會產(chǎn)生錯誤。

求簡單的C語言程序(含有至少5個庫函數(shù))?

#includestdio.h

#includestring.h

#includemath.h

main()

{

char c;

int i,j,k,s;

int m;

double a;

scanf("%c\n",c);

scanf("%d\n",m);

//若c是字母('A'-'Z','a'-'z')返回非0值,否則返回0

i=isalpha(c);

printf("i=%d",i);

//若c是數(shù)字('0'-'9')返回非0值,否則返回0

j=isdigit(c);

printf("j=%d",j);

//若c是大寫字母('A'-'Z')返回非0值,否則返回0

k=isupper(c);

printf("k=%d",k);

//返回x的開方

a= sqrt(m)

printf("a=%d",a);

//若c是空格(' '),水平制表符('\t'),回車符('\r'),

//走紙換行('\f'),垂直制表符('\v'),換行符('\n')

//返回非0值,否則返回0

s= isspace( c)

printf("s=%d",s);

}

另外,還有

int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z')返回非0值,否則返回0

int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或數(shù)字('0'-'9')

返回非0值,否則返回0

int isascii(int ch) 若ch是字符(ASCII碼中的0-127)返回非0值,否則返回0

int iscntrl(int ch) 若ch是作廢字符(0x7F)或普通控制字符(0x00-0x1F)

返回非0值,否則返回0

int isdigit(int ch) 若ch是數(shù)字('0'-'9')返回非0值,否則返回0

int isgraph(int ch) 若ch是可打印字符(不含空格)(0x21-0x7E)返回非0值,否則返回0

int islower(int ch) 若ch是小寫字母('a'-'z')返回非0值,否則返回0

int isprint(int ch) 若ch是可打印字符(含空格)(0x20-0x7E)返回非0值,否則返回0

int ispunct(int ch) 若ch是標(biāo)點(diǎn)字符(0x00-0x1F)返回非0值,否則返回0

int isspace(int ch) 若ch是空格(' '),水平制表符('\t'),回車符('\r'),

走紙換行('\f'),垂直制表符('\v'),換行符('\n')

返回非0值,否則返回0

int isupper(int ch) 若ch是大寫字母('A'-'Z')返回非0值,否則返回0

int isxdigit(int ch) 若ch是16進(jìn)制數(shù)('0'-'9','A'-'F','a'-'f')返回非0值,

否則返回0

int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應(yīng)的小寫字母('a'-'z')

int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應(yīng)的大寫字母('A'-'Z')

========數(shù)學(xué)函數(shù)(原型聲明所在頭文件為math.h、stdlib.h、string.h、float.h)===========

int abs(int i) 返回整型參數(shù)i的絕對值

double cabs(struct complex znum) 返回復(fù)數(shù)znum的絕對值

double fabs(double x) 返回雙精度參數(shù)x的絕對值

long labs(long n) 返回長整型參數(shù)n的絕對值

double exp(double x) 返回指數(shù)函數(shù)ex的值

double frexp(double value,int *eptr) 返回value=x*2n中x的值,n存貯在eptr中

double ldexp(double value,int exp); 返回value*2exp的值

double log(double x) 返回logex的值

double log10(double x) 返回log10x的值

double pow(double x,double y) 返回xy的值

double pow10(int p) 返回10p的值

double sqrt(double x) 返回x的開方

double acos(double x) 返回x的反余弦cos-1(x)值,x為弧度

double asin(double x) 返回x的反正弦sin-1(x)值,x為弧度

double atan(double x) 返回x的反正切tan-1(x)值,x為弧度

double atan2(double y,double x) 返回y/x的反正切tan-1(x)值,y的x為弧度

double cos(double x) 返回x的余弦cos(x)值,x為弧度

double sin(double x) 返回x的正弦sin(x)值,x為弧度

double tan(double x) 返回x的正切tan(x)值,x為弧度

double cosh(double x) 返回x的雙曲余弦cosh(x)值,x為弧度

double sinh(double x) 返回x的雙曲正弦sinh(x)值,x為弧度

double tanh(double x) 返回x的雙曲正切tanh(x)值,x為弧度

double hypot(double x,double y) 返回直角三角形斜邊的長度(z),

x和y為直角邊的長度,z2=x2+y2

double ceil(double x) 返回不小于x的最小整數(shù)

double floor(double x) 返回不大于x的最大整數(shù)

void srand(unsigned seed) 初始化隨機(jī)數(shù)發(fā)生器

int rand() 產(chǎn)生一個隨機(jī)數(shù)并返回這個數(shù)

double poly(double x,int n,double c[])從參數(shù)產(chǎn)生一個多項(xiàng)式

double modf(double value,double *iptr)將雙精度數(shù)value分解成尾數(shù)和階

double fmod(double x,double y) 返回x/y的余數(shù)

double frexp(double value,int *eptr) 將雙精度數(shù)value分成尾數(shù)和階

double atof(char *nptr) 將字符串nptr轉(zhuǎn)換成浮點(diǎn)數(shù)并返回這個浮點(diǎn)數(shù)

double atoi(char *nptr) 將字符串nptr轉(zhuǎn)換成整數(shù)并返回這個整數(shù)

double atol(char *nptr) 將字符串nptr轉(zhuǎn)換成長整數(shù)并返回這個整數(shù)

char *ecvt(double value,int ndigit,int *decpt,int *sign)

將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串

char *fcvt(double value,int ndigit,int *decpt,int *sign)

將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串

char *gcvt(double value,int ndigit,char *buf)

將數(shù)value轉(zhuǎn)換成字符串并存于buf中,并返回buf的指針

char *ultoa(unsigned long value,char *string,int radix)

將無符號整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時所用基數(shù)

char *ltoa(long value,char *string,int radix)

將長整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時所用基數(shù)

char *itoa(int value,char *string,int radix)

將整數(shù)value轉(zhuǎn)換成字符串存入string,radix為轉(zhuǎn)換時所用基數(shù)

double atof(char *nptr) 將字符串nptr轉(zhuǎn)換成雙精度數(shù),并返回這個數(shù),錯誤返回0

int atoi(char *nptr) 將字符串nptr轉(zhuǎn)換成整型數(shù), 并返回這個數(shù),錯誤返回0

long atol(char *nptr) 將字符串nptr轉(zhuǎn)換成長整型數(shù),并返回這個數(shù),錯誤返回0

double strtod(char *str,char **endptr)將字符串str轉(zhuǎn)換成雙精度數(shù),并返回這個數(shù),

long strtol(char *str,char **endptr,int base)將字符串str轉(zhuǎn)換成長整型數(shù),

并返回這個數(shù),

int matherr(struct exception *e)

用戶修改數(shù)學(xué)錯誤返回信息函數(shù)(沒有必要使用)

double _matherr(_mexcep why,char *fun,double *arg1p,

double *arg2p,double retval)

用戶修改數(shù)學(xué)錯誤返回信息函數(shù)(沒有必要使用)

unsigned int _clear87() 清除浮點(diǎn)狀態(tài)字并返回原來的浮點(diǎn)狀態(tài)

void _fpreset() 重新初使化浮點(diǎn)數(shù)學(xué)程序包

unsigned int _status87() 返回浮點(diǎn)狀態(tài)字

============目錄函數(shù)(原型聲明所在頭文件為dir.h、dos.h)================

int chdir(char *path) 使指定的目錄path(如:"C:\\WPS")變成當(dāng)前的工作目錄,成

功返回0

int findfirst(char *pathname,struct ffblk *ffblk,int attrib)查找指定的文件,成功

返回0

pathname為指定的目錄名和文件名,如"C:\\WPS\\TXT"

ffblk為指定的保存文件信息的一個結(jié)構(gòu),定義如下:

┏━━━━━━━━━━━━━━━━━━┓

┃struct ffblk ┃

┃{ ┃

┃ char ff_reserved[21]; /*DOS保留字*/┃

┃ char ff_attrib; /*文件屬性*/ ┃

┃ int ff_ftime; /*文件時間*/ ┃

┃ int ff_fdate; /*文件日期*/ ┃

┃ long ff_fsize; /*文件長度*/ ┃

┃ char ff_name[13]; /*文件名*/ ┃

┃} ┃

┗━━━━━━━━━━━━━━━━━━┛

attrib為文件屬性,由以下字符代表

┏━━━━━━━━━┳━━━━━━━━┓

┃FA_RDONLY 只讀文件┃FA_LABEL 卷標(biāo)號┃

┃FA_HIDDEN 隱藏文件┃FA_DIREC 目錄 ┃

┃FA_SYSTEM 系統(tǒng)文件┃FA_ARCH 檔案 ┃

┗━━━━━━━━━┻━━━━━━━━┛

例:

struct ffblk ff;

findfirst("*.wps",ff,FA_RDONLY);

int findnext(struct ffblk *ffblk) 取匹配finddirst的文件,成功返回0

void fumerge(char *path,char *drive,char *dir,char *name,char *ext)

此函數(shù)通過盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),

文件名name(TC、WPS等),擴(kuò)展名ext(.EXE、.COM等)組成一個文件名

存與path中.

int fnsplit(char *path,char *drive,char *dir,char *name,char *ext)

此函數(shù)將文件名path分解成盤符drive(C:、A:等),路徑dir(\TC、\BC\LIB等),

文件名name(TC、WPS等),擴(kuò)展名ext(.EXE、.COM等),并分別存入相應(yīng)的變量中.

int getcurdir(int drive,char *direc) 此函數(shù)返回指定驅(qū)動器的當(dāng)前工作目錄名稱

drive 指定的驅(qū)動器(0=當(dāng)前,1=A,2=B,3=C等)

direc 保存指定驅(qū)動器當(dāng)前工作路徑的變量 成功返回0

char *getcwd(char *buf,iint n) 此函數(shù)取當(dāng)前工作目錄并存入buf中,直到n個字

節(jié)長為為止.錯誤返回NULL

int getdisk() 取當(dāng)前正在使用的驅(qū)動器,返回一個整數(shù)(0=A,1=B,2=C等)

int setdisk(int drive) 設(shè)置要使用的驅(qū)動器drive(0=A,1=B,2=C等),

返回可使用驅(qū)動器總數(shù)

int mkdir(char *pathname) 建立一個新的目錄pathname,成功返回0

int rmdir(char *pathname) 刪除一個目錄pathname,成功返回0

char *mktemp(char *template) 構(gòu)造一個當(dāng)前目錄上沒有的文件名并存于template中

char *searchpath(char *pathname) 利用MSDOS找出文件filename所在路徑,

,此函數(shù)使用DOS的PATH變量,未找到文件返回NULL

===========進(jìn)程函數(shù)(原型聲明所在頭文件為stdlib.h、process.h)===========

void abort() 此函數(shù)通過調(diào)用具有出口代碼3的_exit寫一個終止信息于stderr,

并異常終止程序。無返回值

int exec…裝入和運(yùn)行其它程序

int execl( char *pathname,char *arg0,char *arg1,…,char *argn,NULL)

int execle( char *pathname,char *arg0,char *arg1,…,

char *argn,NULL,char *envp[])

int execlp( char *pathname,char *arg0,char *arg1,…,NULL)

int execlpe(char *pathname,char *arg0,char *arg1,…,NULL,char *envp[])

int execv( char *pathname,char *argv[])

int execve( char *pathname,char *argv[],char *envp[])

int execvp( char *pathname,char *argv[])

int execvpe(char *pathname,char *argv[],char *envp[])

exec函數(shù)族裝入并運(yùn)行程序pathname,并將參數(shù)

arg0(arg1,arg2,argv[],envp[])傳遞給子程序,出錯返回-1

在exec函數(shù)族中,后綴l、v、p、e添加到exec后,

所指定的函數(shù)將具有某種操作能力

有后綴 p時,函數(shù)可以利用DOS的PATH變量查找子程序文件。

l時,函數(shù)中被傳遞的參數(shù)個數(shù)固定。

v時,函數(shù)中被傳遞的參數(shù)個數(shù)不固定。

e時,函數(shù)傳遞指定參數(shù)envp,允許改變子進(jìn)程的環(huán)境,

無后綴e時,子進(jìn)程使用當(dāng)前程序的環(huán)境。

void _exit(int status)終止當(dāng)前程序,但不清理現(xiàn)場

void exit(int status) 終止當(dāng)前程序,關(guān)閉所有文件,寫緩沖區(qū)的輸出(等待輸出),

并調(diào)用任何寄存器的"出口函數(shù)",無返回值

int spawn…運(yùn)行子程序

int spawnl( int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL)

int spawnle( int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL,char *envp[])

int spawnlp( int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL)

int spawnlpe(int mode,char *pathname,char *arg0,char *arg1,…,

char *argn,NULL,char *envp[])

int spawnv( int mode,char *pathname,char *argv[])

int spawnve( int mode,char *pathname,char *argv[],char *envp[])

int spawnvp( int mode,char *pathname,char *argv[])

int spawnvpe(int mode,char *pathname,char *argv[],char *envp[])

spawn函數(shù)族在mode模式下運(yùn)行子程序pathname,并將參數(shù)

arg0(arg1,arg2,argv[],envp[])傳遞給子程序.出錯返回-1

mode為運(yùn)行模式

mode為 P_WAIT 表示在子程序運(yùn)行完后返回本程序

P_NOWAIT 表示在子程序運(yùn)行時同時運(yùn)行本程序(不可用)

P_OVERLAY表示在本程序退出后運(yùn)行子程序

在spawn函數(shù)族中,后綴l、v、p、e添加到spawn后,

所指定的函數(shù)將具有某種操作能力

有后綴 p時, 函數(shù)利用DOS的PATH查找子程序文件

l時, 函數(shù)傳遞的參數(shù)個數(shù)固定.

v時, 函數(shù)傳遞的參數(shù)個數(shù)不固定.

e時, 指定參數(shù)envp可以傳遞給子程序,允許改變子程序運(yùn)行環(huán)境.

當(dāng)無后綴e時,子程序使用本程序的環(huán)境.

int system(char *command) 將MSDOS命令command傳遞給DOS執(zhí)行

======轉(zhuǎn)換子程序(函數(shù)原型所在頭文件為math.h、stdlib.h、ctype.h、float.h)========

char *ecvt(double value,int ndigit,int *decpt,int *sign)

將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串

char *fcvt(double value,int ndigit,int *decpt,int *sign)

將浮點(diǎn)數(shù)value轉(zhuǎn)換成字符串并返回該字符串

char *gcvt(double value,int ndigit,char *buf)

將數(shù)value轉(zhuǎn)換成字符串并存于buf中,并返回buf的指針

char *ultoa(unsigned long value,char *string,int radix)

將無符號整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時所用基數(shù)

char *ltoa(long value,char *string,int radix)

將長整型數(shù)value轉(zhuǎn)換成字符串并返回該字符串,radix為轉(zhuǎn)換時所用基數(shù)

char *itoa(int value,char *string,int radix)

將整數(shù)value轉(zhuǎn)換成字符串存入string,radix為轉(zhuǎn)換時所用基數(shù)

double atof(char *nptr) 將字符串nptr轉(zhuǎn)換成雙精度數(shù),并返回這個數(shù),錯誤返回0

int atoi(char *nptr) 將字符串nptr轉(zhuǎn)換成整型數(shù), 并返回這個數(shù),錯誤返回0

long atol(char *nptr) 將字符串nptr轉(zhuǎn)換成長整型數(shù),并返回這個數(shù),錯誤返回0

double strtod(char *str,char **endptr)將字符串str轉(zhuǎn)換成雙精度數(shù),并返回這個數(shù),

long strtol(char *str,char **endptr,int base)將字符串str轉(zhuǎn)換成長整型數(shù),

并返回這個數(shù),

int toascii(int c) 返回c相應(yīng)的ASCII

int tolower(int ch) 若ch是大寫字母('A'-'Z')返回相應(yīng)的小寫字母('a'-'z')

int _tolower(int ch) 返回ch相應(yīng)的小寫字母('a'-'z')

int toupper(int ch) 若ch是小寫字母('a'-'z')返回相應(yīng)的大寫字母('A'-'Z')

int _toupper(int ch) 返回ch相應(yīng)的大寫字母('A'-'Z')

c語言中如何一個函數(shù)的多次調(diào)用

一個函數(shù)只能有一個返回值,指針可以返回多個,例如:

void aaa()

{

int *a,*c;

int a,c;

*a=a;*c=c;

a=b();c=b();

}

下面調(diào)用 *a和*c.

擴(kuò)展資料:

在C語言中,指針的使用非常廣泛,因?yàn)槭褂弥羔樛梢陨筛咝А⒏o湊的代碼。總的來說,使用指針有如下好處:

1、指針的使用使得不同區(qū)域的代碼可以輕易的共享內(nèi)存數(shù)據(jù),這樣可以使程序更為快速高效;

2、C語言中一些復(fù)雜的數(shù)據(jù)結(jié)構(gòu)往往需要使用指針來構(gòu)建,如鏈表、二叉樹等;

3、C語言是傳值調(diào)用,而有些操作傳值調(diào)用是無法完成的,如通過被調(diào)函數(shù)修改調(diào)用函數(shù)的對象,但是這種操作可以由指針來完成,而且并不違背傳值調(diào)用。

參考資料來源:百度百科-指針 (編程語言中的一個對象)

誰能幫我設(shè)計一個使用C語言庫函數(shù)的簡單程序

#include stdio.h

#include string.h

void main()

{

char a[] = "hello";

char b[100];

memset(b, 0, sizeof(b));

strcpy(b, a);

strcat(b, "world!");

printf("%s\n", b);

}

5個函數(shù),memset,sizeof,strcpy,strcat,printf,個個常用。

C語言中什么是庫函數(shù)?

庫函數(shù)(Library function)是把函數(shù)放到庫里,供別人使用的一種方式。.方法是把一些常用到的函數(shù)編完放到一個文件里,供不同的人進(jìn)行調(diào)用。調(diào)用的時候把它所在的文件名用#include加到里面就可以了。一般是放到lib文件里的。

一般是指編譯器提供的可在c源程序中調(diào)用的函數(shù)。可分為兩類,一類是c語言標(biāo)準(zhǔn)規(guī)定的庫函數(shù),一類是編譯器特定的庫函數(shù)。

由于版權(quán)原因,庫函數(shù)的源代碼一般是不可見的,但在頭文件中你可以看到它對外的接口

庫函數(shù)簡介。

C語言的語句十分簡單,如果要使用C語言的語句直接計算sin或cos函數(shù),就需要編寫頗為復(fù)雜的程序。因?yàn)镃語言的語句中沒有提供直接計算sin或cos函數(shù)的語句。又如為了顯示一段文字,我們在C語言中也找不到顯示語句,只能使用庫函數(shù)printf。

C語言的庫函數(shù)并不是C語言本身的一部分,它是由編譯程序根據(jù)一般用戶的需要編制并提供用戶使用的一組程序。C的庫函數(shù)極大地方便了用戶,同時也補(bǔ)充了C語言本身的不足。事實(shí)上,在編寫C語言程序時,應(yīng)當(dāng)盡可能多地使用庫函數(shù),這樣既可以提高程序的運(yùn)行效率,又可以提高編程的質(zhì)量。

這里調(diào)用的是靜態(tài)庫。

函數(shù)庫:函數(shù)庫是由系統(tǒng)建立的具有一定功能的函數(shù)的集合。庫中存放函數(shù)的名稱和對應(yīng)的目標(biāo)代碼,以及連接過程中所需的重定位信息。用戶也可以根據(jù)自己的需要建立自己的用戶函數(shù)庫。

庫函數(shù):存放在函數(shù)庫中的函數(shù)。庫函數(shù)具有明確的功能、入口調(diào)用參數(shù)和返回值。

連接程序:將編譯程序生成的目標(biāo)文件連接在一起生成一個可執(zhí)行文件。

頭文件:有時也稱為包含文件。C語言庫函數(shù)與用戶程序之間進(jìn)行信息通信時要使用的數(shù)據(jù)和變量,在使用某一庫函數(shù)時,都要在程序中嵌入(用#include)該函數(shù)對應(yīng)的頭文件。

由于C語言編譯系統(tǒng)應(yīng)提供的函數(shù)庫尚無國際標(biāo)準(zhǔn)。不同版本的C語言具有不同的庫函數(shù),用戶使用時應(yīng)查閱有關(guān)版本的C的庫函數(shù)參考手冊。我們以Turbo C為例簡介一下C的庫函數(shù),并附錄中給出了Turbo C的部分常用庫函數(shù)。

文章名稱:多次使用庫函數(shù)編寫c語言,c語言編寫的每個函數(shù)都可以進(jìn)行
瀏覽地址:http://chinadenli.net/article22/dsejjjc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化網(wǎng)站建設(shè)App開發(fā)Google商城網(wǎng)站網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)