C语言 保存由命令行给出的文件名,在动态生成的字符串中



我正在编写一个程序,它从命令行获取一个文件路径名称,然后继续打开该文件。我的问题是:是否有可能创建一个字符串,在用户输入的那一刻,它的大小正好适合文件路径?如果不是,我必须使用的非动态字符数组的理想大小是多少?

我只是想去掉硬编码的字符串大小:

char filename[100];
scanf(" %s", filename);

它带来了很多问题

根据C标准,FILENAME_MAX宏(在stdio.h中定义)指定文件名的最大或推荐长度(引用:222) If the implementation imposes no practical limit on the length of file name strings, the value of FILENAME_MAX should instead be the recommended size of an array intended to hold a file name string.)。我的建议是,找出目标操作系统的文件名长度限制

%as格式说明符查看scanf。它应该为您分配缓冲区,使您不必担心为缓冲区指定多大的大小:

char *buf;
scanf("%as", &buf);

来自Linux手册:

可选的'a'字符。这用于字符串转换和使调用方不必为对象分配相应的缓冲区保留输入:相反,scanf()分配一个足够的缓冲区大小,并将此缓冲区的地址分配给相应的指针参数,它应该是指向char *变量的指针变量不需要在调用之前初始化)。调用者当不再需要这个缓冲区时,应该随后释放(3)它。这是一个GNU扩展;C99使用'a'字符作为转换(它也可以在GNU实现中这样使用)。

最新更新