我的理解:
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
尝试在那里写入第一个字符时,您会出现段错误。
解决办法是:
- 使用堆栈或全局数组 (
char c[1000];
) 或指向动态分配内存的指针 (char *c = malloc(1000);
),不是NULL
指针。 - 永远不要使用
gets
,它本质上是有问题/不安全的(它不能限制读取以匹配可用缓冲区的大小);请改用fgets
。
关于c - 为什么 char * c = NULL;导致以下代码出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59870656/