让我们说我们有一系列指针:
char *ptr[30];
现在这个工作正常,似乎没有做任何意想不到的事情!我可以轻松输入名字.
scanf("%s", ptr[1]);
scanf("%s", ptr[2]);
scanf("%s", ptr[3]);
printf("%s\n", ptr[1]);
printf("%s\n", ptr[2]);
printf("%s\n", ptr[3]);
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果一个指针可以用这种方式来存储名称的结尾数,那么为什么要使用malloc呢?在这种情况下,ptr [1]不指向输入中的字符,而是指向新输入本身.例如,如果ptr有mukul,ptr [1]应该指向'u',如果在指定这样的指针时没有分配空间,那么限制是多少?
Cha*_*via 13
指针不能以这种方式使用.它有时可能通过纯粹的机会"起作用",但使用指针而不为其分配内存将导致未定义的行为 - 这意味着您的程序可能表现不正常并给您意想不到的结果.
请记住,仅仅因为您的程序编译和运行并不意味着它是正确的.在C语言中,存在一类称为"未定义行为"的错误,其中许多编译器很乐意让您无需抱怨.这些包括使用未初始化的变量覆盖缓冲区,或者取消引用不指向合法分配的内存块的指针.显示未定义行为的程序有时甚至可能正常工作 - 但它们通常非常不稳定并且容易崩溃.