C Char指针

Muk*_*kla 4 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]);
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果一个指针可以用这种方式来存储名称的结尾数,那么为什么要使用malloc呢?在这种情况下,ptr [1]不指向输入中的字符,而是指向新输入本身.例如,如果ptr有mukul,ptr [1]应该指向'u',如果在指定这样的指针时没有分配空间,那么限制是多少?

Cha*_*via 13

指针不能以这种方式使用.它有时可能通过纯粹的机会"起作用",但使用指针而不为其分配内存将导致未定义的行为 - 这意味着您的程序可能表现不正常并给您意想不到的结果.

请记住,仅仅因为您的程序编译和运行并不意味着它是正确的.在C语言中,存在一类称为"未定义行为"的错误,其中许多编译器很乐意让您无需抱怨.这些包括使用未初始化的变量覆盖缓冲区,或者取消引用不指向合法分配的内存块的指针.显示未定义行为的程序有时甚至可能正常工作 - 但它们通常非常不稳定并且容易崩溃.

  • 也请告诉声明的char*PTR [30],告知有30个字符指针,即它可以指向30个不同的角色,因为它是一个指针数组或指向30种不同的字符数组(在这种情况下名字)? (2认同)