Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 合并txt文件中的字符串_C_String_File - Fatal编程技术网

C 合并txt文件中的字符串

C 合并txt文件中的字符串,c,string,file,C,String,File,目标是合并file1和file2中的字符串,但每次我尝试这样做时,只有file2的第一句话合并到file1。我不明白它为什么这么做,而且我对编程还不熟悉,刚刚开始使用文件指针 #include <stdio.h> #include <string.h> int main (int argc, char *argv[]){ FILE *fin1 = fopen(argv[1],"r"); FILE *fin2 = fopen(argv[2],"r"); F

目标是合并file1和file2中的字符串,但每次我尝试这样做时,只有file2的第一句话合并到file1。我不明白它为什么这么做,而且我对编程还不熟悉,刚刚开始使用文件指针

#include <stdio.h>
#include <string.h>

int main (int argc, char *argv[]){

  FILE *fin1 = fopen(argv[1],"r");
  FILE *fin2 = fopen(argv[2],"r");

  FILE *fout = fopen(argv[3],"w");

  char sentence1[1000];
  char sentence2[500];

  fgets(sentence1,1000,fin1);
  fgets(sentence2,500,fin2);

  strcat(sentence1,sentence2);

  fprintf(fout,"%s",sentence1);

  printf("%s",sentence2);

  fclose(fin1);
  fclose(fin2);
  fclose(fout);

  return 0;
}
#包括
#包括
int main(int argc,char*argv[]){
文件*fin1=fopen(argv[1],“r”);
文件*fin2=fopen(argv[2],“r”);
文件*fout=fopen(argv[3],“w”);
字符语句1[1000];
char语句2[500];
fgets(第11000句,fin1);
fgets(第2500句,第2页);
strcat(第1句、第2句);
fprintf(fout,“%s”,第1句);
printf(“%s”,第2句);
fclose(fin1);
fclose(fin2);
fclose(fout);
返回0;
}


当内容到达文件末尾或新行时,
fgets
函数停止解析内容。这就是为什么它只读取文件的第一行。您可以查看完整的文档

在检查
fgets
的结果时,您可以通过循环读取文件的每一行,例如:

char sentence[500] = "";
while (fgets(aux,sizeof(aux),fin) != NULL)
        strcat(sentence, aux);

请注意,这可能不是唯一的解决方案,您可以找到其他想法。

无需使用
strcat()
,顺便说一句。只需使用
fprintf(fout,“%s%s”,第1句,第2句)您还应该包括结果输出文件的内容。您应该在其中获得文件2的第一行,而不是第二行。是的,对不起,只有第一句话正在打印,而不是第二句。我删除了strcat(),但它仍然不起作用。您已经了解了循环,是吗?因为您可能希望将
fgets
fprintf
放在一个循环中。调用
fgets
只会得到一行输入。要获得第二行,您必须再次调用
fgets
。。谢谢。对于这种情况,可能更好的解决方案是避免串联,顺便说一句,
语句
指向长度为1的只读缓冲区<代码>strcat(句子,辅助)
将导致未定义的行为。抱歉。忘了在我的代码前面添加什么。我会编辑它。