文档库 最新最全的文档下载
当前位置:文档库 › 可以使用FGETS函数来实现

可以使用FGETS函数来实现

可以使用FGETS函数来实现

? 可以使用fgets函数来实现。

1 函数名:

fgets

2 声明形式:

char *fgets(char *buf, int bufsize, FILE *stream);

3 头文件:

stdio.h

4 功能及参数说明:

从stream中读取一行数据存到buf中。如果数据长度小于bufsize,那么读入整行数据,并将换行符转换为字符串结束符\0。如果数据长度超过bufsize,那么只读入bufsize大小的数据,并在结尾添加\0。

5 返回值:

成功,则返回第一个参数buf;

在读字符时遇到end-of-file,则eof指示器被设置,如果还没读入任何字符就遇到这种情况,则buf保持原来的内容,返回NULL;

如果发生读入错误,error指示器被设置,返回NULL,buf的值可能被改变。

函数返回值

函数返回值 1.不带返回值的函数:return; 不带返回值的函数的返回类型为void,这样的函数会在函数的最后一个语句完成时隐式调用return;也可以在函数的结尾显式地调用return; 对于任意一个函数,只要执行了return语句,函数就强制结束了。 对于返回类型为void的函数,如果不显式地调用return;则只有在函数结束时才会隐式调用。可以在函数执行的某一阶段,显式地调用return;来结束函数,不再执行return语句之后的函数部分。 由于break语句只能用于循环和switch语句中,因此,想要结束if语句直接退出函数,可用return; 只有一种情况下,返回类型为void的函数可以使用return expression这一形式,那就是返回另一个返回类型同样是void的函数的调用结果。 如: void A() void B() { { .... .... .... .... return; return A(); } }//因为A返回类型为void,所以可以这样调用。 2.具有返回值的函数:return expression; 代码: int max(int x,int y) #include { int main() int z; { if(x>=y) int a,b,c; z=x; scanf("%d%d",&a,&b); else c=max(a,b); z=y; printf("%d\n",c); return z; return 0; } } 在main函数中调用max函数,函数调用语句为max(a,b); 仔细研究一下max(a,b)。 对于一个表达式来说,它要完成一定的功能,还要返回一个操作结果(即表达式的值)。如i++,它的功能是使变量i的值加1,它的值是i自增前的值。同样的,函数调用也同样如此:max(a,b)的功能是把实参a,b的值传递给形参并执行函数中的各个语句;max(a,b)的值是一个int类型的值。 ++i的值是i自增后的值,相当于i=i+1,return i;对于i++来说,它的值是i自增前的值,那么如何获得这个值呢?编译器是这样做的:编译器自动创建一个临时变量并用i自增前的值来初始化这个临时变量。用这个临时变量的值来作为i++这个表达式的值。 同样的,执行max(a,b)后,首先完成参数传递并执行函数max中的各条语句。接着创建一个int型的临时变量并用return expression中expression的值来初始化这个临时变量。临时变量的类型为函数的返回值类型,即函数名之前的类型名。对max()函数来说就是int。

函数参数返回值总结

函数的参数、返回值总结 (一)参数 ◆函数分: 有参函数:函数名(实参列表) 无参函数:函数名() ◆有参函数调用语句中的实参应与被调函数中的形参在个数、类型、顺序上一致。 ◆参数传递时,实参向形参一一对应进行单向的值传递。值:可是数值(变量或数 组元素)或数值的地址值(指针或数组名)。 (二)返回值 函数的返回值即为函数调用后的结果,可有如下返回结果的方法: (1)通过return语句返回一个值; (2)利用地址做参数返回一个或多个值; (3)利用全局变量返回一个或多个值。 (三)例 1、170页实验内容(1):打印由正三角和倒三角组成的图形。 有一个参数,无返回值。实参向形参传递一个数值。 #include /* 有一个参数,无返回值的函数,打印正三角 */ void f1(int n) /* 形参只能是变量,用来接收实参传来的数值 */ { int i,j,k; for(k=1;k<=n;k++) {for(i=1;i<=10-k;i++) printf(" "); for(j=1;j<=k;j++) printf(" *"); printf("\n");} } /* 有一个参数,无返回值的函数,打印倒三角*/ void f2(int n) {int i,j,k; for(k=n;k>=1;k--) {for(i=1;i<=10-k;i++) printf(" "); for(j=1;j<=k;j++) printf(" *"); /*双引号内应为“空格加半角星号”*/ printf("\n");} } main() { int n; scanf("%d",&n);

fgets和gets的区别

fgets函数 从流中读一行或指定个字符, 原型是char *fgets(char *s, int n, FILE *stream); 从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s的指针,否则返回NULL。 形参注释:*string结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针 例:如果一个文件的当前位置的文本如下 Love ,I Have But ........ 如果用 fgets(str1,4,file1); 则执行后str1="Lov",读取了4-1=3个字符, 而如果用 fgets(str1,23,file1); 则执行str="Love ,I Have",读取了一行(不包括行尾的'n')。 序例: #include #include int main(void) { FILE *stream;

char string[] = "This is a test"; char msg[20]; /* open a file for update */ stream = fopen("DUMMY.FIL", "w+"); /* write a string into the file */ fwrite(string, strlen(string), 1, stream); /* seek to the start of the file */ fseek(stream, 0, SEEK_SET); /* read a string from the file */ fgets(msg, strlen(string)+1, stream); /* display the string */ printf("%s", msg); fclose(stream); return 0; } fgets函数用来从文件中读入字符串。fgets函数的调用形式如下:fgets(str,n,fp);此处,fp是文件指针;str是存放在字符串的起始地址;n是一个int类型变量。函数的功能是从fp所指文件中读入n-1个字符放入str为起始地址的空间内;如果在未读满n-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。因此,确切地说,调用fgets函数时,最多只能读入n-1个字符。读入结束后,系统将自

C语言函数说明与返回值

C语言函数说明与返回值 在学习C语言函数以前,我们需要了解什么是模块化程序设计方法。 人们在求解一个复杂问题时,通常采用的是逐步分解、分而治之的方法,也就是把一个大问题分解成若干个比较容易求解的小问题,然后分别求解。程序员在设计一个复杂的应用程序时,往往也是把整个程序划分为若干功能较为单一的程序模块,然后分别予以实现,最后再把所有的程序模块像搭积木一样装配起来,这种在程序设计中分而治之的策略,被称为模块化程序设计方法。 在C语言中,函数是程序的基本组成单位,因此可以很方便地用函数作为程序模块来实现C语言程序。 利用函数,不仅可以实现程序的模块化,程序设计得简单和直观,提高了程序的易读性和可维护性,而且还可以把程序中普通用到的一些计算或操作编成通用的函数,以供随时调用,这样可以大大地减轻程序员的代码工作量。 函数是C语言的基本构件,是所有程序活动的舞台。函数的一般形式是: type-specifier function_name(parameter list) parameter declarations { body of the function } 类型说明符定义了函数中return语句返回值的类型,该返回值可以是任何有效类型。如果没有类型说明符出现,函数返回一个整型值。参数表是一个用逗号分隔的变量表,当函数被调用时这些变量接收调用参数的值。一个函数可以没有参数,这时函数表是空的。但即使没有参数,括号仍然是必须要有的。参数说明段定义了其中参数的类型。

当一个函数没有明确说明类型时, C语言的编译程序自动将整型( i n t)作为这个函数的缺省类型,缺省类型适用于很大一部分函数。当有必要返回其它类型数据时,需要分两步处理: 首先,必须给函数以明确的类型说明符;其次,函数类型的说明必须处于对它的首次调用之前。只有这样,C编译程序才能为返回非整型的值的函数生成正确代码。 4.1.1 函数的类型说明 可将函数说明为返回任何一种合法的C语言数据类型。 类型说明符告诉编译程序它返回什么类型的数据。这个信息对于程序能否正确运行关系极大,因为不同的数据有不同的长度和内部表示。 返回非整型数据的函数被使用之前,必须把它的类型向程序的其余部分说明。若不这样做,C语言的编译程序就认为函数是返回整型数据的函数,调用点又在函数类型说明之前,编译程序就会对调用生成错误代码。为了防止上述问题的出现,必须使用一个特别的说明语句,通知编译程序这个函数返回什么值。下例示出了这种方法。 第一个函数的类型说明sum()函数返回浮点类型的数据。这个说明使编译程序能够对sum( ) 的调用产生正确代码。 函数类型说明语句的一般形式是: type_specifier function_name (; ) 即使函数使用形参,也不要将其写入说明句。若未使用类型说明语句,函数返回的数据类型可能与调用者所要求的不一致,其结果是难以预料的。如果两者同处于一个文件中,编译程序可以发现该错误并停止编译。如果不在同一个文件中,编译程序无法发现这种错误。类型检查仅在编译中进行,链接和运行时均不检查。因此,必须十分细心以确保绝不发生上

文件打开函数fopen

文件打开函数fopen fopen函数用来打开一个文件,其调用的一般形式为: 文件指针名=fopen(文件名,使用文件方式) 其中,“文件指针名”必须是被说明为FILE 类型的指针变量,“文件名”是被打开文件的文件名。“使用文件方式”是指文件的类型和操作要求。“文件名”是字符串常量或字符串数组。例如: FILE *fp; fp=("file a","r"); 其意义是在当前目录下打开文件file a,只允许进行“读”操作,并使fp指向该文件。 -------------------------------------------------------------------------------- -- C语言的文件操作 FILE *fphzk fphzk=("c:\\hzk16',"rb") 其意义是打开C驱动器磁盘的根目录下的文件hzk16,这是一个二进制文件,只允许按二进制方式进行读操作。两个反斜线“”中的第一个表示转义字符,第二个表示根目录。使用文件的方式共有12种,下面给出了它们的符号和意义。 文件使用方式意义 “rt”只读打开一个文本文件,只允许读数据 “wt”只写打开或建立一个文本文件,只允许写数据 “at”追加打开一个文本文件,并在文件末尾写数据 “rb”只读打开一个二进制文件,只允许读数据 “wb”只写打开或建立一个二进制文件,只允许写数据 “ab”追加打开一个二进制文件,并在文件末尾写数据 “rt+”读写打开一个文本文件,允许读和写 “wt+”读写打开或建立一个文本文件,允许读写 “at+”读写打开一个文本文件,允许读,或在文件末追加数据 “rb+”读写打开一个二进制文件,允许读和写 “wb+”读写打开或建立一个二进制文件,允许读和写 “ab+”读写打开一个二进制文件,允许读,或在文件末追加数据 对于文件使用方式有以下几点说明: 1. 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是: r(read): 读 w(write): 写 a(append): 追加 t(text): 文本文件,可省略不写 b(banary): 二进制文件 +: 读和写 2. 凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。

VBA函数返回值

VBA之函数返回值 1.返回一个值 Function define_yy(ByVal names As String, ByVal workbooks As String) As String Dim str_return As String '返回值 Dim i, t As Integer ........ ........ ........ ........ ........ define_yy = str_return End Function 对于函数返回值的要点已经用粗体表示出来了.调用此函数的格式为: call modle_connection.define_yy() (这个是不需要返回值的调用方法) bb=modle_connection.define_yy(a,b) (这是需要返回值的方法) 注:modle_connection为程序块名 2.返回值为多个值,可以采用返回数组的类型 Function return_data(ByVal strSEL As String, ByRef x As Integer) As String() '需要有括号,代表数组 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim bb(1000, 20) As String Dim i As Integer, j As Integer cn.Open strCN rs.Open strSEL, cn i = 1 Do While Not rs.EOF If x = 1 Then bb(i, 1) = rs(0) Else For j = 1 To x bb(i, j) = rs(j - 1) Next j End If i = i + 1 rs.MoveNext Loop x = i - 1 return_data = bb() 'BB()本身也需要定义为数组

C语言文件操作函数总结

文件操作函数: 打开方式的取值和意义如下: ◆"r":该打开方式为只读方式 ◆"w":该打开方式为只写方式 ◆"a":该打开方式为尾加方式 ◆"r+":该打开方式为读/写方式,相当于"r"与"w"方式的结合。 ◆"w+":该打开方式为读/写方式,相当于"r"与"w"方式的结合。 ◆"a+":该打开方式为读/尾加方式 ◆"rb":该打开方式为只读方式 ◆"wb":该打开方式为只写方式 ◆"ab":该打开方式为尾加方式 ◆"rb+":该打开方式为读/写方式,相当于"rb"与"wb"方式的结合。 ◆"wb+":该打开方式为读/写方式,相当于"rb"与"wb"方式的结合。 ◆"ab+":该打开方式为读/尾加方式 打开文件:fopen( "文件路径",“使用文件方式”)。 关闭文件: fclose( 文件指针)。 char fgetc(FILE *p); 函数读取参数p指向的文件。fgetc函数返回一个字符。 处理读取结束:对于文本文件,如果读取位置到达文件末尾,fgetc函数返回一个结束标志EOF ; ANSI C提供了一个feof(FILE *p) 函数,当fgetc函数读取到文件末尾时,feof(FILE *p)函数返回1,否则返回0。 char * fgets(char str[],int n,FILE *p) ; 函数读取参数p指向的文件每次调用fgets(char str[],int n,FILE *p) 就顺序地读取n个字节,如此顺序地读取,直到读取的n个字节包含文件的结束标志。 fgets函数按文本方式读取文件,如果读取的n个字节中含有文件的结束标志EOF,fgets函数返回NULL。 char fputs(char str[],FILE *p); 向参数p指向的文件写入字符数组str。每次调用fputs函数就顺序地向文件中写入字符串str,如此顺序地写入,直到停止调用fputs函数或发生写入错误。

函数练习题(C语言)带答案

C语言函数练习题 一、选择题 1. 一个完整的C源程序是【】。 A)要由一个主函数或一个以上的非主函数构成 B)由一个且仅由一个主函数和零个以上的非主函数构成 C)要由一个主函数和一个以上的非主函数构成 D)由一个且只有一个主函数或多个非主函数构成 2. 以下关于函数的叙述中正确的是【】。 A)C语言程序将从源程序中第一个函数开始执行 B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行 C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束 D)main可作为用户标识符,用以定义任意一个函数 3. 以下关于函数的叙述中不正确的是【】。 A)C程序是函数的集合,包括标准库函数和用户自定义函数 B)在C语言程序中,被调用的函数必须在main函数中定义 C)在C语言程序中,函数的定义不能嵌套 D)在C语言程序中,函数的调用可以嵌套 4. 在一个C程序中,【】。 A)main函数必须出现在所有函数之前 B)main函数可以在任何地方出现 C)main函数必须出现在所有函数之后 D)main函数必须出现在固定位置 5. 若在C语言中未说明函数的类型,则系统默认该函数的数据类型是【】 A)float B)long C)int D)double 6. 以下关于函数叙述中,错误的是【】。 A)函数未被调用时,系统将不为形参分配内存单元 B)实参与形参的个数应相等,且实参与形参的类型必须对应一致 C)当形参是变量时,实参可以是常量、变量或表达式 D)形参可以是常量、变量或表达式 7. C程序中各函数之间可以通过多种方式传递数据,下列不能用于实现数据传递的方式是 【】。 A)参数的形实结合 B)函数返回值 C)全局变量 D)同名的局部变量 8. 若函数调用时参数为基本数据类型的变量,以下叙述正确的是【】。 A)实参与其对应的形参共占存储单元 B)只有当实参与其对应的形参同名时才共占存储单元 C)实参与对应的形参分别占用不同的存储单元 D)实参将数据传递给形参后,立即释放原先占用的存储单元

C语言文件读写函数集合

C语言文件读写函数 1.fopen() fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen 实现三个功能:为使用而打开一个流,把一个文件和此流相连接,给此流返回一个FILR指针。 参数filename指向要打开的文件名,mode表示打开状态的字符串,其取值如下: 字符串含义 "r" 以只读方式打开文件 "w" 以只写方式打开文件 "a" 以追加方式打开文件 "r+" 以读/写方式打开文件,如无文件出错 "w+" 以读/写方式打开文件,如无文件生成新文件 一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符’/n’,而二进制模式认为它是两个字符0x0D,0x0A;如果在文件中读到0x1B,文本模式会认为这是文件结束符,也就是二进制模型不会对文件进行处理,而文本方式会按一定的方式对数据作相应的转换。

系统默认的是以文本模式打开,可以修改全部变量_fmode的值来修改这个设置,例如_fmode=O_TEXT;就设置默认打开方式为文本模式;而 _fmode=O_BINARY;则设置默认打开方式是二进制模式。 我们也可以在模式字符串中指定打开的模式,如"rb"表示以二进制模式打开只读文件,"w+t"或"wt+"表示以文本模式打开读/写文件。 此函数返回一个FILE指针,所以申明一个FILE指针后不用初始化,而是用fopen()来返回一个指针并与一个特定的文件相连,如果成败,返回NULL. 例: 以下是引用片段: FILE *fp; if(fp=fopen("123.456","wb")) puts("打开文件成功"); else puts("打开文件成败"); 2.fclose() fclose()的功能就是关闭用fopen()打开的文件,其原型是:int fclose(FILE *fp);如果成功,返回0,失败返回EOF。 在程序结束时一定要记得关闭打开的文件,不然可能会造成数据丢失的情况,我以前就经常犯这样的错误。 例:fclose(fp); 3.fputc()

事件处理函数中返回值

事件处理函数中返回值 事件处理函数返回值其实指当事件发生时,浏览器会执行默认的操作,而当事件处理函数会返回一个结果,而当这个结果为true时,浏览器会继续执行默认操作,否则会停止执行。如果还是不懂的话,我们看一下下面这个实例: 当点击超链接标签时,如果check()的值为true,那么浏览器会跳转到abc.html页面中去,如果check()的值为false,点击超链接标签就不会跳转 这里return其实是对事件对象中的returnValue属性值的设置,而该属性就决定了该事件操作是否继续操作,当retrunValue为true时则继续操作,为false时则中断操作。 然而直接执行函数check,不使用return返回将不会对eturnvalue进行设置所以会默认地继续执行操作,比如如下实例 上面的实例就是不管check()的结果是true还是fasle,浏览器都会跳转到abc.html 页面中去。所以必须使用return返回。 事件处理函数返回值在表单中也存在这种情况,如下图

判断用户名是否为空,如果为空就不提交表单,否则就提交表单...跟上面理解是一样的。 讲到这里有很多同学在这里还能理解,但是呢,换个地方,换个事件绑定方式就不能理解了。 比如:在DOM对象上绑定事件: 很多人不能理解的是:在html元素上绑定事件时,return用了两次,才能阻止表单的提交,为什么在DOM对象上绑定事件时只用了一次return就能阻止表单提交,这里我们就要看看为什么了。 我们看看直接打印btn.onclick的结果,发现我们在html元素上绑定的事件处理函数fn是出现在DOM对象上事件处理函数的里面。 所以onclick=”return fn()”等价于 btn.onclick=function(){ return fn() },而fn()的结果true/false就决定表单是否提交。 总结:事件函数返回值; 如果返回true或者不返回,浏览器执行默认操作; 如果返回false,阻止浏览器默认操作。

c语言中的fgets与fputs函数

fgets函数详解 fgets函数详解 fgets函数从流中读一行或指定个字符, 原型是char *fgets(char *s, int n, FILE *stream); 从流中读取n-1个字符,除非读完一行,参数s是来接收字符串,如果成功则返回s 的指针,否则返回NULL。 形参注释:*s结果数据的首地址;n-1:一次读入数据块的长度,其默认值为1k,即1024;stream文件指针 例:如果一个文件的当前位置的文本如下 Love ,I Have But ........ 如果用 fgets(str1,4,file1); 则执行后str1="Lov",读取了4-1=3个字符, 而如果用 fgets(str1,23,file1); 则执行str="Love ,I Have",读取了一行(包括行尾的'\n',并自动加上字符串结束符'\0')。编辑本段序例: #include int main(void) { FILE *stream; char string[] = "This is a test"; char msg[20]; /* open a file for update */ stream = fopen("DUMMY.FIL", "w+"); /* write a string into the file */ fwrite(string, strlen(string), 1, stream); /* seek to the start of the file */ fseek(stream, 0, SEEK_SET); /* read a string from the file */ fgets(msg, strlen(string)+1, stream); /* display the string */ printf("%s", msg); fclose(stream); return 0; }

将引用作为函数返回值

将引用作为函数返回值 要以引用返回函数值,则函数定义时必须遵循以下格式: 类型标识符&函数名(形参列表及类型说明) { //函数体 } 可见,以引用返回函数值,定义函数时需要在函数名前加&。引用作为函数的返回值时,函数的返回值可以理解为函数返回了一个变量(事实上,函数返回引用时,它返回的是一个指向返回值的隐式指针),因此,值为引用的函数可以用作赋值运算符的左操作数。另外,用引用返回一个函数值的最大好处是,在内存中不产生被返回值的副本。 #include using namespace std; int &func() { static int num = 0; return ++num; } void main() { int i; for(i=0; i<5; i++) cout<

下面再给出一个使用返回引用的函数作为左值的例子,它更有力地揭示了返回引用的函数的本质。 #include using namespace std; double array[5] = {100.1, 100.2, 100.3, 100.4, 100.5}; double &change(int i) { return array[i]; } int main() { int i; cout<<"原始值如下: "; for(i = 0; i < 5; i++) cout << array[i] <<" "; cout<

VC读写函数详解(针对文件)

VC读写函数详解 1.当前文件指针位置获取函数 long ftell( FILE *stream ); 参数:stream 文件指针 返回值:当前文件指针的位置 实例: #include FILE *stream; void main( void ) { long position; char list[100]; if( (stream = fopen( "ftell.c", "rb" )) != NULL ) { /* Move the pointer by reading data: */ fread( list, sizeof( char ), 100, stream ); /* Get position after read: */ position = ftell( stream ); printf( "Position after trying to read 100 bytes: %ld\n", position ); fclose( stream ); } } 输出: Position after trying to read 100 bytes: 100 2.文件的打开函数 FILE *fopen( const char *filename, const char *mode ); FILE *_wfopen( const wchar_t *filename, const wchar_t *mode ); 参数:filename 文件的名称mode 打开文件的模式 返回值:成功的打开文件的话返回文件的指针否则返回NULL表示打开文件错误 注: "r" 只读方式打开 "w" 以写入方式打开 "a" 从文件的尾端写入数据,要是文件不存在则创建后写入数据 "r+"

从零开始学习C语言一之读取文本文件函数fgetsseven51CTO

从零开始学习C语言(一)之读取文本文件(函数fgets) - seven - 51CTO.txt你站在那不要动!等我飞奔过去!雨停了天晴了女人你慢慢扫屋我为你去扫天下了 你是我的听说现在结婚很便宜,民政局9块钱搞定,我请你吧你个笨蛋啊遇到这种事要站在我后面!跟我走总有一天你的名字会出现在我家的户口本上。从零开始学习C语言(一)之读取文本文件(函数fgets) - seven - 51CTO技术博客51CTO 首页我的博客搜索社区:论坛博客下载读书更多 登录注册家园 博客 论坛 下载 自测 门诊 周刊 读书 技术圈 知道 https://www.wendangku.net/doc/ae13389229.html, 【复制】【订阅】原创:125翻译:1转载:62 博客|图库|写博文|帮助 首页|应用代理|数据库|程序设计|监控系统|负载优化|虚拟化|系统工具|C语言|svn&trac&bug|业界生活|生活锁事|puppet 守住每一天 的BLOG 写留言邀请进圈子发消息加友情链接进家园加好友 博客统计信息 51cto博客之星 用户名:守住每一天 文章数:188 评论数:655 访问量:323162 无忧币:6061 博客积分:5748 博客等级:8 注册日期:2007-06-13 热门文章 nginx反向代理配置及优化 从零开始学习C语言(一).. apache+jk+tomcat集群+se.. umount 的时候报错:devic.. mysql+mmm+proxy实现mysq.. nagios 3.X 简单部署及应用 ntop安装过程 我用nagios-check_http .. HTTP 错误 401.1(401.2/4.. 暂时的失业和降薪,是为.. 解决tomcat死掉JK无法连..

关于函数返回值

关于函数返回数组指针的问题 关于函数返回值的问题,其实对于这个问题的考虑是因为前段时间中遇到了,而且说实在的其实在认真调查了一下,才发现其实这个问题可以归纳为函数变量的生命周期问题。 先来说说我的问题,具体例子如下: unsigned char Encode(unsigned char ramdata, unsigned char const *keydata) { unsigned char ramkey[6]; unsigned char *p; ……………… Return P; } 高手可能一眼就看出问题了,我由于长时间没接触,这段时间才重新开始接触,再加上指针学的不好,就没注意,还有就是看公司代码造成的误解。接下来说说具体问题出在哪里。 问题1:返回值是一个指针,但是局部变量的指针的生命周期,在函数结束时,指针的生命周期也结束了,系统会把局部变量指针的空间回收,如果在调用这个返回值就会出问题,这个指针是一个野指针,这里要注意一点的是有一些编译器因为环境的因素,在返回时会返回正确的数据,也就是在读取的时候数据,可以读的对,但是在调用这个数据进行修改时就会出大问题。 问题2:即使将P改为数组也不行,原理同上。 问题3:Return keydata; 也不行,我之所以会拿出这个,是因为我本人在看公司代码的时候,遇到了有同事使用这种做法,但是没有出错,所以我也依葫芦画瓢,结果就是我错了。因为这里keydata在定义申明时时不想被改变的,这里再将它赋值会出大问题。 有问题就要找办法解决,接下来分析一下解决办法。 数值的返回有3中: 1、静态变量; 2、参数返回 3、全局变量 这里我主要介绍后面两种方法(主要是因为我现在没用过第一种),具体如下: 方法一:参数返回 void Encode(unsigned char ramdata, unsigned char const *keydata,unsigned char *p) { unsigned char ramkey[6]; unsigned char i; ……………… } 这里面的8P为返回值。 方法二:全局变量 unsigned char outdata[6] unsigned char Encode(unsigned char ramdata, unsigned char const *keydata) { unsigned char ramkey[6]; ……………… Return outdata;

C语言文件操作函数大全

~~~~~~~~~~##打印了好好学习##~~~~~~~~~~歪诗协会QQ978107204 C语言文件操作函数大全 相关函数feof 表头文件#include 定义函数void clearerr(FILE * stream); 函数说明clearerr()清除参数stream指定的文件流所使用的错误旗标。 返回值 fclose(关闭文件) 相关函数close,fflush,fopen,setbuf 表头文件#include 定义函数int fclose(FILE * stream); 函数说明fclose()用来关闭先前fopen()打开的文件。此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。 返回值若关文件动作成功则返回0,有错误发生时则返回EOF并把错误代码存到errno。 错误代码EBADF表示参数stream非已打开的文件。 范例请参考fopen()。 fdopen(将文件描述词转为文件指针) 相关函数fopen,open,fclose 表头文件#include 定义函数FILE * fdopen(int fildes,const char * mode); 函数说明fdopen()会将参数fildes 的文件描述词,转换为对应的文件指针后返回。参数mode 字符串则代表着文件指针的流形态,此形态必须和原先文件描述词读写模式相同。关于mode 字符串格式请参考fopen()。 返回值转换成功时返回指向该流的文件指针。失败则返回NULL,并把错误代码存在errno中。 范例 #include main() { FILE * fp =fdopen(0,”w+”); fprintf(fp,”%s\n”,”hello!”); fclose(fp); } 执行hello! feof(检查文件流是否读到了文件尾) 相关函数fopen,fgetc,fgets,fread 表头文件#include 定义函数int feof(FILE * stream); 函数说明feof()用来侦测是否读取到了文件尾,尾数stream为fopen()所返回之文件指针。如果已到文件尾则返回非零值,其他情况返回0。 返回值返回非零值代表已到达文件尾。 fflush(更新缓冲区) 相关函数write,fopen,fclose,setbuf 表头文件#include 定义函数int fflush(FILE* stream); 函数说明fflush()会强迫将缓冲区内的数据写回参数stream指定的文件中。如果参数stream为NULL,fflush()会将所有打开的文件数据更新。 返回值成功返回0,失败返回EOF,错误代码存于errno 中。 错误代码EBADF 参数stream 指定的文件未被打开,或打开状态为只读。其它错误代码参考write()。fgetc(由文件中读取一个字符) 相关函数open,fread,fscanf,getc 表头文件include 定义函数nt fgetc(FILE * stream); 函数说明fgetc()从参数stream所指的文件中读取一个字 符。若读到文件尾而无数据时便返回EOF。 返回值getc()会返回读取到的字符,若返回EOF则表示到了文件尾。 范例 #include main() { FILE *fp; int c; fp=fopen(“exist”,”r”); while((c=fgetc(fp))!=EOF) printf(“%c”,c); fclose(fp); } fgets(由文件中读取一字符串) 相关函数open,fread,fscanf,getc 表头文件include 定义函数har * fgets(char * s,int size,FILE * stream); 函数说明fgets()用来从参数stream所指的文件内读入字符并存到参数s所指的内存空间,直到出现换行字符、读到文件尾或是已读了size-1个字符为止,最后会加上NULL作为字符串结束。 返回值gets()若成功则返回s指针,返回NULL则表示有错误发生。 范例 #include main() { char s[80]; fputs(fgets(s,80,stdin),stdout); } 执行this is a test /*输入*/ this is a test /*输出*/ fileno(返回文件流所使用的文件描述词) 相关函数open,fopen 表头文件#include 定义函数int fileno(FILE * stream); 函数说明fileno()用来取得参数stream指定的文件流所使用的文件描述词。 返回值返回文件描述词。 范例 #include main() { FILE * fp; int fd; fp=fopen(“/etc/passwd”,”r”); fd=fileno(fp); printf(“fd=%d\n”,fd); fclose(fp);

C语言文件操作常用函数详解

C语言文件操作常用函数 详解 This model paper was revised by the Standardization Office on December 10, 2020

C语言文件操作详解 在C语言文件操作的过程中,通常有以下几种方式: 1.单个字符的操作: fputc 函数原型:intfputc(intc,FILE*fp); 功能:把一字节代码c写入fp指向的文件中 返回值:正常,返回c;出错,为EOF(-1) fgetc 函数原型:intfgetc(FILE*fp); 功能:从fp指向的文件中读取一字节代码 返回值:正常,返回读到的代码值;读到文件尾或出错,为EOF(-1) feof 函数原型:intfeof(FILE*fp); 功能:判断文件是否到末尾 返回值:文件未结束,返回0;文件结束,返回真(非0)示例: #include #include voidmain() { charch; FILE*fp1=fopen("d:\\a.dat","wb");/*以写的方式打开二进制文件*/ FILE*fp2; if(NULL==fp1) { printf("Cannotopenthisfile!\n"); exit(0); } printf("pleaseinputastring:"); ch=getchar(); while(ch!='#')/*输入#号结束*/ { fputc(ch,fp1);/*依次向文件中写*/ ch=getchar(); } fflush(stdin);/*清空输入缓冲区*/ fclose(fp1); /*关闭文件*/ fp2=fopen("d:\\a.dat","rb");/*以读的方式打开二进制文件*/ if(NULL==fp2) {

C语言学习常用函数

C语言学习常用函数 1.strstr()和strrchr()if (strstr(buff, "ION BETA") != NULL)判断 包含文件:string.h 函数名: strstr 函数原型:extern char *strstr(const char *str1, const char *str2); 语法:* strstr(str1,str2) str1: 被查找目标string expression to search. str2: 要查找对象The string expression to find. 返回值:若str2是str1的子串,则先确定str2在str1的第一次出现的位置,并返回此位置到str1末尾的所有字符;如果str2不是str1的子串,则返回NULL。(注:若想返回str2在str1第一次出现的位置,不是这个函数)。 例子: charstr[]="1234xyz"; char*str1=strstr(str,"34"); cout< #include int main(void) { char string[20]; char *ptr, c = 'r'; strcpy(string, "There are two rings"); ptr = strrchr(string, c); if (ptr) printf("The character %c is at position: %s\n", c, ptr); else printf("The character was not found\n"); return 0; } strrchr返回的指针应当指向"rings"里的'r',而不是“There”或"are"里的'r'。 运行结果是:The character r is at position:rings 2.strcmp(),strncmp(),strncpy(),strcpy() 原型:extern int strcmp(const char *s1,const char * s2);

相关文档
相关文档 最新文档