文件管理 · 2024年7月30日

c读取文件到string|如何在c语言中使用java传入的String

① C语言 怎么用fgets()把一个文件多行内容读取到一个字符串中

#include<stdio.h>#include<stdlib.h>#include<string.h>//返回从filename中读取第m到n行字符保存到mystring,//如果打不开文件,失败返回NULL//如果不足m行,返回NULL,且mystring为空串//如果不足n行,返回NULL,mystring为m行之后的所有内容//如果完成成功,返回mystring,且mystring保存m到n行的字符char*getfilechar(char*filename,intm,intn,char*mystring){#defineN2000//假设每行长度不超过2000字符FILE*fp;inti;charstr[N];*mystring='';if((fp=fopen(filename,"r"))==NULL){printf("打开文件%s失败",filename);returnNULL;}for(i=1;i<m;i++)if(fgets(str,N,fp)==NULL){printf("文件%s长度不足%d行",filename,m);fclose(fp);returnNULL;}for(i=m;i<=n;i++){if(fgets(str,N,fp)==NULL){printf("文件%s长度不足%d行",filename,n);fclose(fp);returnNULL;}strcat(mystring,str);}fclose(fp);returnmystring;}intmain(){charmystring[2000];getfilechar("d:\temp.txt",20,26,mystring);if(mystring!=NULL)printf("%s",mystring);}

② 如何在c语言中使用java传入的String

如何在c语言中使用java传入的字符串s,也就是说如何使用jstring类型。那么在c语言实现中如何使用传入的字符串s? 我们知道java中的String,c语言中应该对应的是char*类型,也就是说我们在jni的c语言实现中如何把jstring类型转换成为char*即可。 方法是这样的: 在c文件中声明char* str,然后 str= (char*)(*env)->GetStringUTFChars(env, jstring,NULL); 这样就可以得到传入的字符串,过程如下: JNIEXPORT jstring JNICALLJava_Test_sayHello (JNIEnv * env, jobject obj, jstring s){ char * str; str=(char*)(*env)->GetStringUTFChars(env,s,NULL); printf("%s",str); (*env)->ReleaseStringUTFChars(env, s, str); ……} 当然,java中有垃圾回收机制,二c语言没有,那么使用完该字符串之后该如何处理呢?字符串str使用完后,需要通知虚拟机平台相关代码无需再访问,方法是 (*env)->ReleaseStringUTFChars(env, jstring, str); 最后还要说一下,如果传入传出的字符串是中文,就又有问题了,我们需要手工进行uncode编码,否则就是乱码,当然如果程序设计合理,这里一般情况下尽量避免进行汉字的传递。 呵呵,就这样了!

③ C语言提取文件内容保存到字符串数组问题

使用文件操作函数即可。1、fgets函数:原型:char*fgets(char*buf,intbufsize,FILE*stream);功能:从文件结构体指针stream中读取数据,每次读取一行;说明:读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋值为\0)。如果该行不足bufsize个字符,则读完该行就结束,如果该行超过bufsize-1个字符,则fgets只返回一个不完整的行,buf缓冲区以\0字符结束,下一次fgets调用会继续读取该行剩余的字符;头文件:stdio.h;返回值:若读入成功,返回与参数buf相同的字符指针,若读入过程中遇到EOF或发生错误,返回NULL指针。所以当遇到返回值为NULL的情况时,应使用ferror或feof函数检查是发生错误还是遇到EOF。2、例程:#include<stdio.h>int a;char b,c[100];int main(){ FILE * fp1 = fopen("input.txt", "r");//打开输入文件 FILE * fp2 = fopen("output.txt", "w");//打开输出文件 if (fp1==NULL || fp2==NULL) {//若打开文件失败则退出 puts("不能打开文件!"); return 0; } fscanf(fp1,"%d",&a);//从输入文件读取一个整数 b=fgetc(fp1);//从输入文件读取一个字符 fgets(c,100,fp1);//从输入文件读取一行字符串 printf("%ld",ftell(fp1));//输出fp1指针当前位置相对于文件首的偏移字节数 fputs(c,fp2);//向输出文件写入一行字符串 fputc(b,fp2);//向输出文件写入一个字符 fprintf(fp2,"%d",a);//向输出文件写入一个整数 fclose(fp1);//关闭输入文件 fclose(fp2);//关闭输出文件,相当于保存 return 0;}