1 | #define BOOST_FILESYSTEM_VERSION 3
|
---|
2 |
|
---|
3 | #include <iostream>
|
---|
4 | #include <cassert>
|
---|
5 | #include <cstring>
|
---|
6 | #include <algorithm>
|
---|
7 | #include <boost/filesystem.hpp>
|
---|
8 |
|
---|
9 | int main()
|
---|
10 | {
|
---|
11 | // EXAMPLE 1: buffer size known at compile time
|
---|
12 | char buffer1[255] = "./foo";
|
---|
13 | boost::filesystem::path p1(buffer1);
|
---|
14 |
|
---|
15 | // size() should be 5 (for "./foo") but is actually 254 because
|
---|
16 | // the entire buffer except for the final character was added to
|
---|
17 | // the path!
|
---|
18 | //
|
---|
19 | // The expected behavior would be to stop at the first
|
---|
20 | // NULL-terminator.
|
---|
21 |
|
---|
22 | std::cout << "p1.string().size() is " << p1.string().size() << std::endl;
|
---|
23 | // output: p1.string().size() is 254
|
---|
24 |
|
---|
25 | // EXAMPLE 2: dynamically allocated buffer
|
---|
26 | char *buffer2 = new char[255];
|
---|
27 | std::fill(buffer2, buffer2 + 255, '\0');
|
---|
28 | strcpy(buffer2, "./foo");
|
---|
29 |
|
---|
30 | // buffer2 is now identical to buffer1
|
---|
31 | assert(std::equal(buffer1, buffer1 + 255, buffer2));
|
---|
32 |
|
---|
33 | // ...but boost::filesystem treats it differently.
|
---|
34 | boost::filesystem::path p2(buffer2);
|
---|
35 |
|
---|
36 | std::cout << "p2.string().size() is " << p2.string().size() << std::endl;
|
---|
37 | // output: p1.string().size() is 5
|
---|
38 |
|
---|
39 | delete [] buffer2;
|
---|
40 | }
|
---|