C 将命令行给定的文件名保存为动态生成的字符串

C 将命令行给定的文件名保存为动态生成的字符串,c,string,malloc,C,String,Malloc,我正在编写一个程序,从命令行获取文件路径名,然后继续打开文件。我的问题是:在用户提供输入的那一刻,是否可以创建一个字符串,该字符串的大小正好是文件路径所需的大小?如果不是,我必须使用的非动态字符数组的理想大小是多少 我只想去掉硬编码的字符串大小: char filename[100]; scanf(" %s", filename); 它有很多问题。看看scanf,其中%作为格式说明符。它应该为您分配缓冲区,让您不用担心为缓冲区指定的大小: char *buf; scanf("%as", &am

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

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

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

它有很多问题。

看看
scanf
,其中
%作为格式说明符。它应该为您分配缓冲区,让您不用担心为缓冲区指定的大小:

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

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


根据C标准,如果实现对文件名字符串的长度没有实际限制,则FILENAME_MAX宏(在stdio.h中定义)指定文件名的最大长度或建议长度(引号:
222),FILENAME_MAX的值应改为用于保存文件名字符串的数组的建议大小。
)。我想说的是,找出目标操作系统的文件名长度限制。

您能给出一个代码示例,说明您现在正在做什么,或者您尝试了什么吗?完整路径是在命令行上给出的,还是应该稍后由用户输入修改?我不清楚。另外,如果包含
stdlib.h
,那么应该有一个PATH\u MAX(或者在旧系统上可能是MAX\u PATH)定义。我想,从命令行将其作为参数,通过scanf将其作为参数,不会有什么区别。我计划同时实现这两个功能。如果它是从命令行来的,那么你就可以在那里使用它,并且不需要为它分配内存,除非你以后修改它。否则它就是Blagovests解决方案或固定大小的
char
-array。如果您使用的是支持is的系统,请尝试规范化文件名(3)。这是realpath的gnu扩展,为路径分配空间。所以不能在ansi c中使用?