可以组合两个字符串,每个字符串的长度为 PATH_MAX?

Possible to combine two strings, each with length of PATH_MAX?

我想构建一个包含文件名(包括完整路径)的字符串。我的做法如下:

#include <limits.h>
#include <stdio.h>
#include <stdlib.h>

int main( int argc, char *argv[] ) {

    char
        fullpath[PATH_MAX],
        workdir[PATH_MAX];
      
    sprintf( workdir, "workdir/" );
    sprintf( fullpath, "%sfilename.dat", workdir);
    printf( "fullpath = %s\n", fullpath );
  
    return EXIT_SUCCESS;
  
}

编译时,我收到以下警告

warning: ‘filename.dat’ directive writing 12 bytes into a region of size between 1 and 4096 [-Wformat-overflow=]
sprintf( fullpath, "%sfilename.dat", workdir);
                      ^~~~~~~~~~~~

note: ‘sprintf’ output between 13 and 4108 bytes into a destination of size 4096
sprintf( fullpath, "%sfilename.dat", workdir);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我是否正确理解了该警告(和注释),我可能会组合两个字符串,每个字符串都带有 PATH_MAX,这会导致问题?

这是否意味着我不应该将带有 PATH_MAX 的字符串与任何其他字符串组合? (至少不是我做的那种简化方式)

sprintf( fullpath, "%sfilename.dat", workdir); 发出警告,因为 workdir 可能过长,以至于连接后的大小超过了 fullpath

的大小

一种没有问题的字符串连接方法:使用 snprintf() 并测试其结果。

int len = snprintf(fullpath, sizeof fullpath, "%sfilename.dat", workdir);
if (len < 0 || (unsigned) len >= sizeof fullpath) {
  Handle_Error();
}