为什么strncpy不能使用malloc分配的字符串?

时间:2010-09-22 16:32:23

标签: c string memory-management malloc

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是一个字符串。)

感谢。

2 个答案:

答案 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有意义。