wcscpy_s - 当指针不是缓冲区的开头时的缓冲区大小?

时间:2016-06-06 19:22:47

标签: c windows winapi

我对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");

0 个答案:

没有答案