【发布时间】:2010-11-01 20:32:05
【问题描述】:
实际上,当我使用指向字符的指针时,memcpy 工作得很好,但当我使用指向字符的指针时停止工作。
有人可以帮我理解为什么 memcpy 在这里失败,或者更好的是,我自己怎么能弄明白。我发现很难理解我的 c/c++ 代码中出现的问题。
char *pc = "abcd";
char **ppc = &pc;
char **ppc2 = &pc;
setStaticAndDynamicPointers(ppc, ppc2);
char c;
c = (*ppc)[1];
assert(c == 'b'); // assertion doesn't fail.
memcpy(&c,&(*ppc[1]),1);
if(c!='b')
puts("memcpy didn't work."); // this gets printed out.
c = (*ppc2)[3];
assert(c=='d'); // assertion doesn't fail.
memcpy(&c, &(*ppc2[3]), 1);
if(c != 'd')
puts("memcpy didn't work again.");
memcpy(&c, pc, 1);
assert(c == 'a'); // assertion doesn't fail, even though used memcpy
void setStaticAndDynamicPointers(char **charIn, char **charIn2)
{
// sets the first arg to a pointer to static memory.
// sets the second arg to a pointer to dynamic memory.
char stat[5];
memcpy(stat, "abcd", 5);
*charIn = stat;
char *dyn = new char[5];
memcpy(dyn, "abcd", 5);
*charIn2 = dyn;
}
【问题讨论】:
-
C 还是 C++?我认为有太多的 C 运行时库 (CRT) 调用和原始指针,无法成为 C++ 代码。
-
我看不到任何 C++,所以我删除了
C++标签。如果我错了,请纠正我。 -
@sbi:你错了。该代码使用 new[] 来分配内存,并且仅限于 C++。虽然新的很容易被malloc取代。