C++,printf编译报错?

C++,printf编译报错?,第1张

给两个建议:

1、源文件后缀默认是.cpp的,不要改成.c

2、源文闷闷件路径自己设在d盘及之后。vc默认安装即可,不需要改目录

这样蚂前弯也许能避免很多你暂时理解不了的悔碰问题

根据你写得要求:

一、头文件file1.h中放了一个函数申明语句。源文件中放了函数。

二、根据头文件include语句解析字符串获取头文件名,与头文件默认路径(常量)组成文件路径。同字符串的匹配找到在语句在源文件的位置,并读取头文件内容替换到源文件对应位置。

三、合并后的内容,我是写入新的文件中,如你想要覆盖同文件,自行修改路径常量。

#include <stdio.h>

#include <malloc.h>

#include <string.h>

#define NN "C:\\newFile.c"//合并后的文件完整路径

#define HPH "C:\\"//头文件的默认路径

int getFSize(char *Path)//获取文件字节数,参数文件路径

char *readHFile(char *hPath)//获取头文件内容

char *checkCFile(char *cPath,char *hcon)// 检查源文件,找到对吵丛册应includ语句,替换成对应头文件内容,并保存到新的文件中

int *findStr(char *str1,char *str2)//在str1中查找str2,返回str2在str1中对应的首尾字符下标

int main()

{

  char *newFile=NULL

  newFile=checkCFile("C:\\file1.c","#include\"file1.h\"")

  if(newFile)

      printf("合并成功,合并后的文件内容为郑型(路径:%s):\n%s\n",NN,newFile)

  else

      printf("合并失败,无匹配内容\n")

  free(newFile)

  return 0

}

int getFSize(char *Path)

{

  int fSize=0

  if(!Path) return 0

  FILE *fp=NULL

  fp=fopen(Path,"r")

  if(!fp) return 0

  fseek(fp,0,SEEK_END)

  fSize=ftell(fp)

  fclose(fp)

  return fSize

}

char *checkCFile(char *cPath,char *hcom)

{

  int i=0,*inx=NULL,fSize=0,hfnLen=0,hPLen=0,len=0

  char *fcon=NULL,*hcon=NULL,*newfcon=NULL,*hPath=NULL,*pb=hcom,*pe=pb,*hfn=NULL

  if(!cPath || !hcom) return NULL

  FILE *fp=NULL

  fp=fopen(cPath,"rb+")//这里不要要用r,避免下面计算升宏大小误差

  if(!fp) return 0

  if(!(fSize=getFSize(cPath))) return NULL

  printf("源文件大小:%d字节\n",fSize)

  fcon=(char *)malloc(sizeof(char)*(fSize+1))

  if(!fcon) return 0

  fcon[fSize]=0

  //fseek(fp,0,SEEK_SET)

  if(fread(fcon,1,fSize,fp)!=fSize) return NULL

  printf("源文件内容为:\n%s\n",fcon)

  if(!(inx=findStr(fcon,hcom))) return NULL//将找到的匹配内容所在下标保存在inx指向地址

  fclose(fp)

  //----通过include语句获取头文件文件名---

  while(*pb!='"')pb++

  pb++,pe=pb

  while(*pe!='"')pe++

  hfnLen=pe-pb

  hfn=(char *)malloc(sizeof(char)*(hfnLen+1))

  if(!hfn)return NULL

  hfn[hfnLen]=0

  while(pb<pe)hfn[i++]=*pb,pb++

  //----------------------------------------

  hPLen=hfnLen+strlen(HPH)

  hPath=(char *)malloc(sizeof(char)*(hPLen+1))

  strcpy(hPath,HPH)

  strcat(hPath,hfn)

  hPath[hPLen]=0

  hcon=readHFile(hPath)//获得头文件对应内容

  //----合并两个文件内容到新的数组,释放原数组---

  len=fSize-strlen(hcom)+strlen(hcon)

  newfcon=(char *)malloc(sizeof(char)*(len+1))

  if(!newfcon) return NULL

  newfcon[0]=0

  fcon[inx[0]]=0

  pb=fcon

  strcpy(newfcon,pb)

  pb=hcon

  strcat(newfcon,pb)

  pb=&fcon[inx[1]+1]

  strcat(newfcon,pb)

  newfcon[len]=0

  free(fcon)

  free(hcon)

  free(hfn)

  //----------------------------------------------

  //-------------写入新文件-----------------------

  fp=fopen(NN,"w")

  if(!fp) return NULL

  fwrite(newfcon,1,strlen(newfcon),fp)

  fclose(fp)

  //---------------------------------------------

  return newfcon

}

char *readHFile(char *hPath)

{

  int fSize=0

  char *hcon=NULL

  FILE *fp=NULL

  fp=fopen(hPath,"rb+")

  if(!fp)return NULL

  if(!(fSize=getFSize(hPath)))return NULL

  printf("头文件大小:%d字节\n",fSize)

  hcon=(char *)malloc(sizeof(char)*(fSize+1))

  if(!hcon) return NULL

  hcon[fSize]=0

  if(fread(hcon,1,fSize,fp)!=fSize) return NULL

  printf("头文件内容为:\n%s\n",hcon)

  fclose(fp)

  return hcon

}

int *findStr(char *str1,char *str2)

{

  char *p0=NULL,*p1=NULL

  int i,cnt=0,len1,len2

  static int inx[2]//str2首尾字符在str1中的对应下标

  if(!str1 || !str2) return NULL

  inx[0]=inx[1]=0

  len1=strlen(str1)

  len2=strlen(str2)

  for(i=0i<len1i++)

  {

      cnt=0,p0=&str1[i],p1=p0+len2-1

      //每次搜索,先用p0,p1定位str2的在str1中的首尾位置,进行字符对比,再两指针向内收缩比较

      if(*p0!=str2[cnt] || *p1!=str2[len2-1-cnt]) continue

      cnt++,p0++,p1--

      while(p0<=p1)

      {

          if(*p0!=str2[cnt] || *p1!=str2[len2-1-cnt]) break//只要一对字符不匹配,跳过本次对比

          cnt++,p0++,p1--

      }

      if(p0>p1)//没有跳过说明本次完全匹配,记录首尾位置

      {

          inx[0]=i,inx[1]=i+len2-1

          return inx

      }

  }

  return NULL

}

以下是一个简单的C语言程序,用于输出给定的图案:

这个程序非常简单。它包括一个main函数,该函数使用printf函数来输出指定的图案。printf函数是缓掘C语言中用于输出文本的函数。

在上面的程序中,我们调用printf函数并将所需的文本作为参数传递。要输出多个字符串,只需在每个字符串之间添加适当的空格或其他分隔符即可。在本例中,我们将所有字符串组合成一个大字符串,并在结尾处添加一个换行符\n以使输出具有更好的可读性。

要运行这个程序,请按照以下步骤 *** 作:

打开一个文本编辑器,例如记事本或Sublime Text。

复制上面的程序并将其粘贴到文本编辑器中。

保存文件并将其命名为任何您喜欢的名称,只需确保文件扩展名为.c。

打开命樱哪伏令提示符或终端窗口。

使用cd命令将当前目录更改为程序所在的目录。

输入gcc yourfile.c -o yourprogram命令编译程序,将yourfile.c替换为你保存的C语言程序文件名,并将yourprogram替换为你要生成的可执行文件名。这个脊携命令将编译程序并生成一个可执行文件。

在命令提示符或终端窗口中输入./yourprogram命令运行程序,将yourprogram替换为你生成的可执行文件名。

程序将输出所需的图案。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/12137352.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存