这是我尝试过的。我甚至还没有以\0
字符结束字符串。
#include <stdio.h>
#include <malloc.h>
#include <string.h>
int main()
{
int size=5;
char *str = (char *)malloc((size)*sizeof(char));
*(str+0) = 'a';
*(str+1) = 'b';
*(str+2) = 'c';
*(str+3) = 'd';
*(str+4) = 'e';
*(str+5) = 'f';
printf("%d %s", (int)strlen(str), str);
return 0;
}
根据规则,如我在malloc中指定的,它只能存储4个字符和一个\0
字符。它给了我完美的输出。
输出
6 abcdef
C不计算其数组:如果您要请求一个多字节的内存块,它会通过一个指针为您提供该块,完全由您负责任地管理它。
这会带来一定的效率-编译器/运行时不会为您检查所有这些开销-但会给不正确的代码带来巨大挑战(已显示了示例)。>>
我们中的许多人都非常喜欢C的底层效率,但是有一个原因,很多人更喜欢Java或C#这样的语言来为您管理并强制执行数组范围。这是一个权衡。