在C语言中把内容写入到文件的指定位置

比如说,我要在data.txt搜索一个名为data的字符串,并把它修改为_data,如何实现这样?data.txt文件的内容如下:oh,hello!pleasecanyo... 比如说,我要在data.txt搜索一个名为data的字符串,并把它修改为_data,如何实现这样?

data.txt文件的内容如下:
oh, hello!
please can you save this data?
you!

如何把data改成_data?
展开
 我来答
吉祥二进制
高粉答主

2015-05-23 · 科技改变生活,生活改变科技。
吉祥二进制
采纳数:33926 获赞数:84583

向TA提问 私信TA
展开全部

  可以使用fseek()来指定文件位置。


  函数原型:int fseek(FILE *stream, long offset, int fromwhere);

  函数说明:函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0(SEEK_SET),当前位置1(SEEK_CUR),文件尾2(SEEK_END))为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。

  返回值:如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置,函数返回一个非0值。


  示例:向test.txt的末尾添加“this is a text"的字符串

   #include <stdio.h>
  #include <string.h>
  int main()
  {
  const char * szwrite = " this is a text";
  FILE *fp = fopen("test.txt", "a+");
  if (fp==0) {
  printf("can't open file\n");
  return 0;
  }
  fseek(fp, 0,SEEK_END);
  fwrite(szwrite, strlen(szwrite) * sizeof(char), 1, fp);
  fclose(fp);
  return 0;
  }
百度网友28b4182
2012-03-17 · TA获得超过7223个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1866万
展开全部
#include"stdio.h"
#include<string.h>
int alpa(char x)
{
return x>='a'&&x<='z'||x>='A'&&x<='Z';

}
int main()
{
char s[1000],tmp[100];
int i,j;
freopen("C:\\data.txt","r",stdin);
freopen("C:\\data1.txt","w",stdout);
while(gets(s))
{
for(i=0;s[i];i++)
{
if(alpa(s[i])&&(i==0||!alpa(s[i-1])))
{
j=0;
while(s[i]&&alpa(s[i]))
{
tmp[j++]=s[i];
i++;
}
i--;
tmp[j]=0;
if(strcmp("data",tmp)==0)
{
printf("_%s",tmp);
}
else printf("%s",tmp);
}
else putchar(s[i]);
}
puts("");
}
return 0;
}
更多追问追答
追问
我是要嵌在程序里面,你能提供单独的代码给我吗?万分感激!
追答
是写成函数吗?
#include"stdio.h"
#include
int alpa(char x)
{
return x>='a'&&x='A'&&x<='Z';

}
int runme()//调用这个函数就行了
{
char s[1000],tmp[100];
int i,j;
freopen("C:\\data.txt","r",stdin);
freopen("C:\\data1.txt","w",stdout);
while(gets(s))
{
for(i=0;s[i];i++)
{
if(alpa(s[i])&&(i==0||!alpa(s[i-1])))
{
j=0;
while(s[i]&&alpa(s[i]))
{
tmp[j++]=s[i];
i++;
}
i--;
tmp[j]=0;
if(strcmp("data",tmp)==0)
{
printf("_%s",tmp);
}
else printf("%s",tmp);
}
else putchar(s[i]);
}
puts("");
}
return 0;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
weiyinwu
2012-03-17 · TA获得超过1540个赞
知道小有建树答主
回答量:1057
采纳率:50%
帮助的人:1147万
展开全部
#include <stdio.h>
void main()
{
FILE *fp;
FILE *fptmp=tmpfile();
char c;
if(fp=fopen("data.txt","r+"))
{
int flag=0;
while(c=fgetc(fp),c!=EOF)
{
if(c=='d') flag=1;
else if(c=='a' && flag==1) flag=2;
else if(c=='t' && flag==2) flag=3;
else if(c=='a' && flag==3) flag=4;
else flag=0;
fputc(c,fptmp);
if(flag==4)
{
fseek(fptmp,-4,SEEK_CUR);//
fputs("_data",fptmp);
}
}
fseek(fptmp,0,SEEK_SET);
fseek(fp,0,SEEK_SET);
while(c=fgetc(fptmp),c!=EOF)
fputc(c,fp);
}
fclose(fp);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
往翼已离夜
2012-03-17 · TA获得超过176个赞
知道小有建树答主
回答量:552
采纳率:85%
帮助的人:106万
展开全部
厉害
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式