我正在编写一个从命令行获取文件路径名的程序,然后继续打开该文件。我的问题是:在用户提供输入的那一刻,是否可以创建一个字符串,这恰好是文件路径所需的大小?如果没有,那么我必须使用的非动态字符数组的理想大小是什么?
我只是想摆脱硬编码的字符串大小:
char filename[100];
scanf(" %s", filename);
它带来了很多问题。
答案 0 :(得分:1)
使用scanf
格式说明符查看%as
。它应该为您分配缓冲区,让您不必担心要为缓冲区指定的大小:
char *buf;
scanf("%as", &buf);
来自Linux manual:
可选的'a'字符。这用于字符串转换,和 减轻调用者需要分配相应的缓冲区 保持输入:相反,scanf()分配足够的缓冲区 size,并将此缓冲区的地址分配给相应的 指针参数,它应该是一个指向char *变量的指针(这个 变量不需要在调用之前初始化)。呼叫者,召集者 随后应该在不再需要时释放(3)此缓冲区。 这是一个GNU扩展; C99使用'a'字符作为转换 说明符(它也可以在GNU实现中使用)。
答案 1 :(得分:1)
根据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.
)。我会说,找出目标操作系统的文件名长度限制。