截断文件时出现分段错误 #包括 #包括 #包括 #包括 int main(){ 文件*fileptr; char filechar[40]; int siz; printf(“输入文件名:”); scanf(“%s”,filechar); printf(“请输入尺寸”); scanf(“%d”,大小); fileptr=fopen(filechar,“a+”); ftruncate(文件编号(文件编号),大小); fclose(文件管理器); 返回0; }

截断文件时出现分段错误 #包括 #包括 #包括 #包括 int main(){ 文件*fileptr; char filechar[40]; int siz; printf(“输入文件名:”); scanf(“%s”,filechar); printf(“请输入尺寸”); scanf(“%d”,大小); fileptr=fopen(filechar,“a+”); ftruncate(文件编号(文件编号),大小); fclose(文件管理器); 返回0; },c,C,我试图创建一个程序,供用户选择创建文件名和文件大小 当我运行时,我得到了分段错误,即使我使用了fseek(fileptr,siz,SEEK\u SET)您有分段错误,因为您将siz的值传递给scanf()而不是转换说明符%d的地址。为了避免此类错误,您应该在strct模式下编译:gcc-Wall-Werror 还有其他问题: 为此,应使用较大的long 您应该传递filechar的最大大小,并使用更大的缓冲区 您应该测试scanf()和fopen的返回值 您应该报告运行时错误 以下是修改后的

我试图创建一个程序,供用户选择创建文件名和文件大小
当我运行时,我得到了分段错误,即使我使用了
fseek(fileptr,siz,SEEK\u SET)
您有分段错误,因为您将
siz
的值传递给
scanf()
而不是转换说明符
%d
的地址。为了避免此类错误,您应该在strct模式下编译:
gcc-Wall-Werror

还有其他问题:

  • 为此,应使用较大的
    long
  • 您应该传递
    filechar
    的最大大小,并使用更大的缓冲区
  • 您应该测试
    scanf()
    fopen
    的返回值
  • 您应该报告运行时错误
以下是修改后的版本:

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

int main() {
    FILE *fileptr;
    char filechar[40];
    int siz;

    printf("Enter file name : ");
    scanf("%s", filechar);
    printf("please enter size");
    scanf("%d", siz);

    fileptr = fopen(filechar, "a+");
    ftruncate(fileno(fileptr), siz);
    fclose(fileptr);
    return 0;
}
#包括
#包括
#包括
#包括
#包括
int main(){
文件*fileptr;
char filechar[1024];
长尺寸;
printf(“输入文件名:”);
如果(scanf(“%1023s”,filechar)!=1){
fprintf(stderr,“无效输入”);
返回1;
}
printf(“请输入尺寸”);
如果(扫描频率(“%ld”,&siz)!=1){
fprintf(stderr,“无效输入”);
返回1;
}
fileptr=fopen(filechar,“a+”);
if(fileptr==NULL){
fprintf(stderr,“无法打开文件%s:%s\n”,
filechar,strerror(errno));
返回1;
}
if(ftruncate(fileno(fileptr),siz)){
fprintf(stderr,“无法截断文件%s:%s\n”,
filechar,strerror(errno));
fclose(文件管理器);
返回1;
}
fclose(文件管理器);
返回0;
}

您有一个分段错误,因为您将
siz
的值传递给
scanf()
而不是其转换说明符
%d
的地址。为了避免此类错误,您应该在strct模式下编译:
gcc-Wall-Werror

还有其他问题:

  • 为此,应使用较大的
    long
  • 您应该传递
    filechar
    的最大大小,并使用更大的缓冲区
  • 您应该测试
    scanf()
    fopen
    的返回值
  • 您应该报告运行时错误
以下是修改后的版本:

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

int main() {
    FILE *fileptr;
    char filechar[40];
    int siz;

    printf("Enter file name : ");
    scanf("%s", filechar);
    printf("please enter size");
    scanf("%d", siz);

    fileptr = fopen(filechar, "a+");
    ftruncate(fileno(fileptr), siz);
    fclose(fileptr);
    return 0;
}
#包括
#包括
#包括
#包括
#包括
int main(){
文件*fileptr;
char filechar[1024];
长尺寸;
printf(“输入文件名:”);
如果(scanf(“%1023s”,filechar)!=1){
fprintf(stderr,“无效输入”);
返回1;
}
printf(“请输入尺寸”);
如果(扫描频率(“%ld”,&siz)!=1){
fprintf(stderr,“无效输入”);
返回1;
}
fileptr=fopen(filechar,“a+”);
if(fileptr==NULL){
fprintf(stderr,“无法打开文件%s:%s\n”,
filechar,strerror(errno));
返回1;
}
if(ftruncate(fileno(fileptr),siz)){
fprintf(stderr,“无法截断文件%s:%s\n”,
filechar,strerror(errno));
fclose(文件管理器);
返回1;
}
fclose(文件管理器);
返回0;
}

scanf(“%d”,尺寸)->
scanf(“%d”和&siz)。您需要检查
fopen
是否成功:
if(fileptr==NULL){display error message And fail…}
。感谢您想到我错过了这个机会而感到尴尬that@user字体愚蠢的打字错误很常见,别担心。看看其他问题。
scanf(“%d”,siz)->
scanf(“%d”和&siz)。您需要检查
fopen
是否成功:
if(fileptr==NULL){display error message And fail…}
。感谢您想到我错过了这个机会而感到尴尬that@user字体愚蠢的打字错误很常见,别担心。看看其他问题。