c fprintf添加额外的字符串

c fprintf添加额外的字符串,c,string,printf,extra,C,String,Printf,Extra,我试图制作一个程序,将我想要的字符串添加到文件中我想要的位置。运行程序时,必须按如下方式调用: /addString文件\u名称位置文本 例如,如果我有一个包含123456789的文件,并且我在位置3中添加了“hello”,则新文件的内容是123hello456789(位置从0开始计数)。当我尝试在位置0和9添加新字符串时,问题就出现了。它正确地添加了它,但在最后它还添加了一个额外的字符串,如^G或^YÍ6,我不知道为什么 这是我的密码: #include <stdio.h> #in

我试图制作一个程序,将我想要的字符串添加到文件中我想要的位置。运行程序时,必须按如下方式调用: /addString文件\u名称位置文本

例如,如果我有一个包含123456789的文件,并且我在位置3中添加了“hello”,则新文件的内容是123hello456789(位置从0开始计数)。当我尝试在位置0和9添加新字符串时,问题就出现了。它正确地添加了它,但在最后它还添加了一个额外的字符串,如^G或^YÍ6,我不知道为什么

这是我的密码:

#include <stdio.h>
#include <stdlib.h>


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

            FILE *fd;
            long size, rest;
            char c;

            fd = fopen(argv[1], "r+");

            fseek(fd, 0, SEEK_END);
            size = ftell(fd)-1 ;

            rest = size - atoi(argv[2]);

            char  buffer[rest];
            fseek(fd, atoi(argv[2]), SEEK_SET);

            int i = 0;
            while(i < rest){
                    c=fgetc(fd);
                    buffer[i] = c;
                    i++;

            }
            fseek(fd, atoi(argv[2]), SEEK_SET);

            fprintf(fd, "%s", argv[3]);
            fprintf(fd, "%s", buffer);

            fclose( fd );

     }

}
#包括
#包括
main(int argc,char*argv[]){
如果(argc==4){
文件*fd;
长尺寸,休息;
字符c;
fd=fopen(argv[1],“r+”);
fseek(fd,0,SEEK_END);
尺寸=ftell(fd)-1;
剩余=尺寸-atoi(argv[2]);
字符缓冲区[rest];
fseek(fd,atoi(argv[2]),SEEK_集);
int i=0;
当(我<休息){
c=fgetc(fd);
缓冲区[i]=c;
i++;
}
fseek(fd,atoi(argv[2]),SEEK_集);
fprintf(fd,“%s”,argv[3]);
fprintf(fd,“%s”,缓冲区);
fclose(fd);
}
}

Add
buffer[i]='\0'
while
循环后终止字符串。另外,
字符缓冲区[rest]-->
char缓冲区[rest+1]顺便说一句:为什么
-1
中的
size=ftell(fd)-1?添加
缓冲区[i]='\0'
while
循环后终止字符串。另外,
字符缓冲区[rest]-->
char缓冲区[rest+1]顺便说一句:为什么
-1
中的
size=ftell(fd)-1