我有这条道路: ./demodir/a1/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1
当我仅使用一(1)个额外字节为字符串中的路径名分配空间时(对于' \ 0'),字符串的打印方式不同。
path = (char *) malloc( strlen(dirname) + strlen(direntp->d_name) + 1 );
打印: ./demodir/a1!/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1
�....是问题
我需要所有" + 2"内存分配的字节数,除了内容的长度。为什么会这样?
答案 0 :(得分:3)
你需要额外的字节来包含斜杠'/',将dirname与basename分开。
char *path = (char *) malloc( strlen(dirname) + 1 + strlen(direntp->d_name) + 1 );
sprintf(path, "%s/%s", dirname, dirent->d_name)