char* temp;
temp = (char*) malloc (strlen(window->entry.value)+1);
//strncpy( temp, window->entry.value, sizeof(temp) ); DOESN"T WORK
memcpy (temp, window->entry.value, strlen(window->entry.value) + 1); //WORKS
(其中window-> entry.value是一个字符串。)
感谢。
答案 0 :(得分:6)
sizeof(temp)
没有按照您的想法行事。它告诉你指向char的指针的大小(以字节为单位),这是temp
的内容。最有可能在你的系统上有4或8个。
这与任何特定字符串的长度或从malloc
返回的任何特定缓冲区的大小无关。
使用memcpy
时,你使用了strncpy
,并且在使用memcpy
时长度错误,这是纯粹的侥幸。如果将sizeof(temp)
作为长度传递,则strncpy
也无效;如果传递正确长度,则{{1}}将起作用。
答案 1 :(得分:0)
Strncpy并不关心你的记忆在哪里。您使用sizeof(temp)的事实表明您不知道C字符串中的左侧,因为这仅适用于静态分配的char []缓冲区。 memcpy工作的原因和strncpy不是因为你实际上向memcpy传递了一个合理的长度参数,但完全忘了让这个参数对strncpy有意义。