malloc 分配中的额外字节

extra bytes in malloc allocation

我有这条路: ./demodir/a1/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1

当我仅使用一 (1) 个额外字节(对于“\0”)为字符串中的路径名分配 space 时,字符串的打印方式不同。

path = (char *) malloc( strlen(dirname) + strlen(direntp->d_name) + 1 );    

打印: ./demodir/a1!�/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1

.... 问题所在

除了内容的长度之外,我还需要所有“+2”字节的内存分配。这是为什么呢?

您需要额外的字节来包含将目录名与基本名分隔开的斜杠“/”。

char  *path = (char *) malloc( strlen(dirname) + 1 + strlen(direntp->d_name) + 1 );  
sprintf(path, "%s/%s", dirname, dirent->d_name)