将命令行给出的文件名保存在动态生成的String中

时间:2011-10-24 11:22:23

标签: c string malloc

我正在编写一个从命令行获取文件路径名的程序,然后继续打开该文件。我的问题是:在用户提供输入的那一刻,是否可以创建一个字符串,这恰好是文件路径所需的大小?如果没有,那么我必须使用的非动态字符数组的理想大小是什么?

我只是想摆脱硬编码的字符串大小:

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

它带来了很多问题。

2 个答案:

答案 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.)。我会说,找出目标操作系统的文件名长度限制。