C 字符指针

标签 c pointers char

假设我们有一个指针数组:

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/

相关文章:

值大于 127 的 Java 字符通过 tcp 发送

C、OpenMP : How can I make this parallisation of a triple loop better?

c - realloc 会释放现有内存吗?

c - 如何理解指针 (*) 和寻址 (&) 运算符的概念?

c - 为什么 malloc 使用零大小?

c - (*++argv)[0] 和 while(c = *++argv[0]) 的区别

c++ - 在成员函数中使用 sizeof()

编译 OpenCL HelloWorld 程序 : Linker Error

c - 如何比较C中的2个字符

java - 这可能吗? : HashMap<String, 字符>