gpt4 book ai didi

c - 带有字符串变量的 fopen 失败

转载 作者:行者123 更新时间:2023-11-30 16:13:58 25 4
gpt4 key购买 nike

我正在尝试制作一个小程序,将一些信息保存在文件上,从用户那里获取文件内容和名称的输入。由于某种原因,我无法将 file_name 保存到 FILE *open 中。

当输入字符串作为文件名时有效; open = fopen("文件名.txt","w");但当我尝试输入字符串作为变量时则不然。我查遍了所有地方都找不到答案。

我已经包含了 stdio.h 和 string.h

int main (){


FILE *open;

char first_name[16],last_name[21];
char save_name[30],ext[10];
char file_name[40];
int a,b;

printf("This program will take your name and save it in a file.\n");
printf("Insert your first name:");
scanf("%s",&first_name);
printf("Insert your last name:");
scanf("%s",&last_name);


do{

printf("Insert file name with extension:");
scanf("%[^.].%s", &save_name, &ext);
//Takes filename lenght, minus the dot
a = (int)strlen(save_name)-1;
b = (int)strlen(ext);
sprintf(file_name,"%s.%s",save_name,ext);

}while(a>8 || b>3);

//This is where my problem lies...

open = fopen(file_name,"w");

if(open==NULL){
printf("File %s failed to open, shutting down...",file_name);
}
else{
fprintf(open, "%s %s",first_name,last_name);
printf("\n\nSave successful! File was saved as: %s",file_name);
}

fclose(open);
return 0;
}

最佳答案

问题是您的file_name中有一个前导换行符!换行符是由您的 scanf() 调用以 "%[^.]" 格式添加的(但我不完全确定为什么)。似乎使用 %s 进行字符串输入会自动删除此字符,但 %[^.] 将接受除 . 之外的所有字符(包括空格)。使用它来修复它(跳过换行符):

scanf("\n%[^.].%s", &save_name, &ext);

欢迎评论这条换行符的来源 - 这对我来说是新闻!

PS:在计算 a 时不需要 - 1,因为该点永远不会读入 save_name

关于c - 带有字符串变量的 fopen 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57848484/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com