C 结构中文件路径字段的长度

C 结构中文件路径字段的长度,c,C,我正在构建一个读取XML配置文件的程序。XML配置文件包含几个变量。其中之一就是 <bin_file>/some/file/path/file.bin</bin_file> 代码查看XML文件并在XML中查找匹配元素时填充结构。我不确定bin_文件字段的长度应该是多少。文件路径大小有限制吗 或者我应该让bin_文件成为一个指针,然后在检查XML字段后malloc足够的字节 谢谢你的帮助 在不同的系统中有一些不同 例如: 如上所示,最大尺寸可能为255*4096=1044

我正在构建一个读取XML配置文件的程序。XML配置文件包含几个变量。其中之一就是

<bin_file>/some/file/path/file.bin</bin_file>
代码查看XML文件并在XML中查找匹配元素时填充结构。我不确定bin_文件字段的长度应该是多少。文件路径大小有限制吗

或者我应该让bin_文件成为一个指针,然后在检查XML字段后malloc足够的字节


谢谢你的帮助

在不同的系统中有一些不同 例如:

如上所示,最大尺寸可能为255*4096=1044480?这意味着你应该像我一样

 char bin_file[1044480];
但不建议这样做

您可以包括string.h,并执行如下操作

#include<string.h>
struct buildConofig {
  char foo[3];
  char bar[2];
  string bin_file;
};

正如其他人指出的,使用malloc可能是最安全的方法。在这种特殊情况下,依赖诸如FILENAME\u MAX之类的常量/宏甚至可能是危险的。当从XML文档中读取该路径时,它仍然只是一个字符串,因此它几乎可以是任意长度的,因此很高兴会溢出您的字符缓冲区[FILENAME\u MAX]如果您不手动将其切断。

MAX\u PATH是指针通常使用的方法,malloc稍后可能是最好的方法,但您可以始终使用允许的最大大小,并添加一些错误检查以避免错误。作为指导,请参阅中的FILENAME\u MAX。MAX_PATH不是标准的,但文件名的长度实际上取决于各自的OS.IMO:如果只有struct buildConofig的几个实例,请使用bin_file[MAX_PATH]或等效文件。否则,请将bin_文件设为指针,然后在检查XML字段后malloc足够的字节。string.h不定义struct string。如果您的意思是std::string,那么请注意,这个Q被标记为Ci犯了一个错误。C中并没有字符串结构,PATH_MAX表示路径的最大深度,所以它是255*4096
 char bin_file[1044480];
#include<string.h>
struct buildConofig {
  char foo[3];
  char bar[2];
  string bin_file;
};