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

T.T*_*.T. 1 c string malloc memory-management

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
Run Code Online (Sandbox Code Playgroud)

(其中window-> entry.value是一个字符串.)

谢谢.

Ste*_*sop 6

sizeof(temp)不会做你认为它做的事情.它告诉你指向char的指针的大小(以字节为单位temp).最有可能在您的系统上4或8.

这与任何特定字符串的长度或从中返回的任何特定缓冲区的大小无关malloc.

这是纯粹的侥幸,你使用时通过了合适的长度,使用memcpy时长度错误strncpy.memcpy如果sizeof(temp)作为长度传递也不会起作用,并且strncpy如果传递正确长度则会起作用.