【发布时间】:2013-01-27 14:05:42
【问题描述】:
我正在尝试学习 C,作为开始,我开始为自己的练习编写一个 strcpy。众所周知,原来的 strcpy 很容易出现安全问题,所以我给自己写了一个“安全”的 strcpy 的任务。
我选择的路径是检查源字符串(字符数组)是否真正适合目标内存。据我了解,C 中的字符串只不过是一个指向字符数组的指针,以 0x00 终止。
所以我的挑战是如何找到编译器实际为目标字符串保留了多少内存?
我试过了:
sizeof(dest)
但这不起作用,因为它会返回(我后来发现)dest 的大小,它实际上是一个指针,在我的 64 位机器上,总是返回 8。
我也试过了:
strlen(dest)
但这也不起作用,因为它只会返回长度,直到遇到第一个 0x0,这不一定反映实际保留的内存。
所以这一切都归结为以下问题:如何找到编译器为我的目标“字符串”保留了多少内存???
例子:
char s[80] = "";
int i = someFunction(s); // should return 80
什么是“someFunction”?
提前致谢!
【问题讨论】:
-
一点建议:如果您想要这种类型的安全性,请使用 C++。
-
此外,标准做法(标准库中的标准)是
char *strncpy( char *dest, const char *src, std::size_t count );,即它将目标的大小作为参数传递。 -
sizeof在这种情况下工作得非常好,给出 80。