我反编译了一个应用程序,我不知道真正的数组大小,所以我做了它很大,但我不知道我需要做的是我知道它将在使用strcpy
之前,或者我必须考虑大小还有strcpy
?C strcpy是否需要特定的缓冲区大小或仍然有效?
signed int __cdecl SendSomePacket(struct CONNECTION* conn, int a1, int a2, const char *a3)
{
//char buf[256]; // [sp+10h] [bp-9h]@1
char buf[10]; // [sp+10h] [bp-9h]@1
*(unsigned int *)&buf[1] = a1;
*(unsigned int *)&buf[5] = a2;
strcpy(&buf[9], a3);
buf[0] = 0xEu; // Packet Type
return SendPacket(CONNECTION->socket, buf, strlen(a3) + 10, 1);
}
请问我应该把它与256这是猜测的由默认的大小总是2像256,512,1024,2048乘..
char buf[256]; // [sp+10h] [bp-9h]@1
,或者我应该做它作为尽可能小以节省内存。
char buf[10]; // [sp+10h] [bp-9h]@1
我的strlen(a3)
这个数字后想通是缓冲区应为多大。
我试过strcpy,缓冲区大小为10 ..我放入一个长度超过500的字符串,它的工作可能只是运气好。我只想知道是否应该为初始数据包+ strcpy的数据或仅用于数据包的足够大的静态缓冲区?无论如何,数据包可能会被附加。
这是我试过的一个例子。
您的'strcpy'调用将写入'strlen(a3)+ 1'字符,如果字符数很小,可能会超出数组buf的末尾。 '+ 1'用于字符串终止符,'strcpy'将始终写入。 –