C语言中的动态数组
我正在使用数组,我尝试了以下代码:C语言中的动态数组,c,arrays,pointers,dynamic-memory-allocation,C,Arrays,Pointers,Dynamic Memory Allocation,我正在使用数组,我尝试了以下代码: #include <stdio.h> #include <stdlib.h> int main() { char **q = (char*)malloc(1*sizeof(char*)); q[0]="So Many Books"; q[1]="So Many Books"; q[2]="So Many Books"; q[3]="So Many Books"; q[4]="So Many Books"; printf("%s\n",
#include <stdio.h>
#include <stdlib.h>
int main()
{
char **q = (char*)malloc(1*sizeof(char*));
q[0]="So Many Books";
q[1]="So Many Books";
q[2]="So Many Books";
q[3]="So Many Books";
q[4]="So Many Books";
printf("%s\n",q[0]);
printf("%s\n",q[1]);
printf("%s\n",q[2]);
printf("%s\n",q[3]);
printf("%s\n",q[4]);
return 0;
}
#包括
#包括
int main()
{
char**q=(char*)malloc(1*sizeof(char*));
q[0]=“这么多书”;
q[1]=“这么多书”;
q[2]=“这么多书”;
q[3]=“这么多书”;
q[4]=“这么多书”;
printf(“%s\n”,q[0]);
printf(“%s\n”,q[1]);
printf(“%s\n”,q[2]);
printf(“%s\n”,q[3]);
printf(“%s\n”,q[4]);
返回0;
}
为什么编译器没有在这里给我一个错误?
我只为一组字符串中的一个字符串预订了一个位置
我查阅了一些资源,如:
也就是说,.没有语法错误,因此没有编译器错误。在
c
中,内存管理由程序员决定。听起来你已经知道你的代码充斥着UB。你是一个C程序员。你被认为知道你在做什么。如果你想握手,请选择不同的语言。这对初学者来说尤其困难,但他们的心态是“程序员知道他们在做什么”,即使他们显然不知道。当你需要一个char**
时,为什么你要将malloc
的结果转换成char*
?你为什么要压缩malloc的结果呢?编译器不知道你没有分配足够的内存;这是一个直到编译时才会出现的问题。一个足够聪明的编译器也许能够解决这个问题,但一般来说,传递给malloc
的参数不必是编译时常量,也不可能在所有情况下都检测到这种错误。这不是关于handd holding,,但不应该停止吗?因为我分配的是未预订的位置?