c - 为什么 char * c = NULL;导致以下代码出错?

标签 c pointers

我的理解:

  • char * c 表示 c 没有指向任何内容。

  • 当我输入“Hello World”时,c 现在指向“Hello World”的第一个地址。

  • 它应该打印 H 和 e,但我收到“段错误:11”错误。

谁能告诉我为什么以及如何 char * c = NULL;导致错误?

提前致谢!

#include <stdio.h>

int main(void)
{
    char * c = NULL;
    gets(c);
    printf("%c, %c\n", c[0], c[1]);
    return 0;

}

最佳答案

gets 不分配内存。您的指针指向无法写入的NULL,因此当gets尝试在那里写入第一个字符时,您会出现段错误。

解决办法是:

  1. 使用堆栈或全局数组 (char c[1000];) 或指向动态分配内存的指针 (char *c = malloc(1000);),不是 NULL 指针。
  2. 永远不要使用gets,它本质上是有问题/不安全的(它不能限制读取以匹配可用缓冲区的大小);请改用 fgets

关于c - 为什么 char * c = NULL;导致以下代码出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59870656/

相关文章:

c - 通过默认网关地址的硬件地址而不是以太网多播地址发送多播

c - 简单地通过 char 指针访问函数中的 char 数组

c++ - 是否可以覆盖指向 C++ 中对象的指针的数组访问运算符?

c - 特定情况下的段错误(核心转储)

c++ - 从 C++ 函数返回指针的推荐方法?

c - float 应该只接受正确的输入

c - 如何以编程方式获取 mac os x macbooks 的电池生命周期?

java - android中JNI同步数据的方法

C函数修饰/多态

c - 如何修改十六进制地址ip?