c - 如何使用 char 将字符串传递给 fopen C

标签 c fopen

我尝试使用以下代码将字符传递到字符串中并打开 .txt 文件,以便我可以读取它的内容。我不知道为什么以及如何利用这个 fopen 来实际读取 test.txt

int main(){

char input[60];


char a;
FILE *file;

printf("Hello!\n");

    enter code here

printf("Pelase input a file name in .txt format: \n");
gets(input);

printf("%s",input);
printf("\n");

**file = fopen("%c,input","rt");** 

//file = fopen("%s",input) <-- 不起作用

//file = fopen("%s",input,rt) <-- 错误

if (file){

  while((a=fgetc(file))!=EOF){

        printf("%c",a);
    }
    fclose(file);


}
}

最佳答案

如果您想将“.txt”添加到用户输入的任何内容中,然后打开该文件,您可以使用:

gets (input);
strcat (input, ".txt");
file = fopen (input, "r");

请注意,我提倡使用gets,或者在不首先检查大小的情况下盲目追加到缓冲区,但这是实现您的目标所需的最小必要更改想。请参阅下文,了解为什么这两件事不是一个好主意。

<小时/>

当前代码的其他问题:

  • fgetc() 的返回值是,因此 a 的类型应该是 int

  • gets() 函数本质上是不安全的,以至于它已从标准中删除。使用 fgets() 或查找 safe user input function .

  • 永远不要盲目地追加到缓冲区。就像使用 gets() 和某些 scanf() 格式字符串一样,它会允许代码中出现缓冲区溢出。

关于c - 如何使用 char 将字符串传递给 fopen C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25637346/

相关文章:

c - 无法理解以下函数声明

c - 确定 read() 和 fork() 系统调用的可能输出

我们可以在没有 fopen 的情况下用 C 打开二进制文件吗?

c - 文件无法使用 fopen 打开

php fopen 无法在 Mac OS X 中打开文件进行写入

php/iis : failed to open stream: Permission denied

c++ - 我有一个数组 union 。从一个数组中读取一些元素并从另一个数组中读取其他元素是否可以?

c - 指针指向自身而不进行类型转换?

c# - System.IO.Compression.GZipStream 创建的 7z 解码文件失败

c - 如何在 C 中根据用户输入编辑文件的特定部分?