我对wcscpy_s和类似功能的第二个参数感到有点困惑。微软(wcscat_s)指出
第二个参数是缓冲区的总大小,而不是 剩余尺寸
不幸的是,在该注释之后的代码示例中,它们每次都指向目标缓冲区的开始:
char buf[16];
strcpy_s(buf, 16, "Start");
strcat_s(buf, 16, " End"); // Correct
strcat_s(buf, 16 – strlen(buf), " End"); // Incorrect
所以我想知道......即使指针不是到缓冲区的开头,它们的注释是否也适用?或者我应该在这种情况下指定缓冲区中可用的剩余字节?或者它是否以某种方式识别缓冲区的实际起始地址,即使我传递了buf+1
之类的内容作为第一个参数?
我想说我想用wcscpy_s
替换路径中的基名,这是正确的吗?
#define BUFSIZE 11
wchar_t buf[BUFSIZE];
wchar_t *basename;
wcscpy_s(buf, BUFSIZE, L"C:\\foo.txt");
basename = PathFindFileNameW(buf);
wcscpy_s(basename, (BUFSIZE - ((size_t)basename - (size_t)buf)), L"bar.txt");