假设我们有一个指针数组:
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]);
我的问题是,如果可以通过这种方式使用指针来存储名称的末尾编号,那么为什么要使用 malloc。?在这种情况下,ptr[1] 并不指向输入中的字符,而是指向一个新的输入本身。 例如,如果 ptr 有 mukul,ptr[1] 应该指向 'u' 如果像这样声明指针时没有分配空间,限制是什么?
最佳答案
指针不能那样使用。有时它可能完全偶然地为您“工作”,但是使用指针而不为其分配内存将导致 undefined behavior - 这意味着您的程序可能会出现异常行为并给您带来意想不到的结果。
记住,仅仅因为你的程序编译和运行并不意味着它是正确的。在 C 语言中有一整类被称为“未定义行为”的错误,其中许多编译器会很乐意让你去做而不会提示。这些包括覆盖缓冲区、使用未初始化的变量或取消引用未指向合法分配的内存块的指针。表现出未定义行为的程序有时甚至可以正常工作 - 但它们通常非常不稳定并且容易崩溃。
关于C 字符指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9889384/