c - 给出输入时字符串和数组的区别

标签 c arrays

我写了两个这样的程序,我输入'hello'

程序1:

#include <stdio.h>
#include <string.h>

int main(void)
{

char arr[10];
scanf("%s", arr);
printf("%s\n", arr);
return 0;
}

输出:你好

程序2

#include <stdio.h>
#include <string.h>
int main(void)
{

char *str;
scanf("%s", str);
printf("%s\n", str);
return 0;
}

输出:段错误

根据我的理解,数组名称在运行时将更改为char *类型。我认为 str 已经是 char * 所以它应该能够在第二种情况下指向一个字符串。

1) 在这种情况下,数组如何工作而 str 却不能?

2)这个程序中arr和str的区别从哪里开始?为什么它对程序员来说应该是显而易见的?

最佳答案

当您将未初始化的指针传递给 scanf() 时,这意味着未定义的行为。因此,在调用 scanf 之前,使用 malloc 或 calloc 为指针分配内存。

关于c - 给出输入时字符串和数组的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43015056/

相关文章:

c - 尝试比较两种排序算法的空间复杂度。不知道如何解读答案

c - 当您调用克隆系统调用时,谁设置了 RIP 寄存器?

C - 段错误

c++ - 在 win32 中创建自定义消息类型?

php - 如何对类似于链表的条目进行排序?

c - 为什么我在 C 中初始化结构时得到 #28 expression must be a constant value?

Java 2d 数组 If 语句

javascript - 使用 js-xlsx 解析 Excel 中的数据

c - 如何将动态数组的一部分分配给整个静态数组

java - 如何在递归中做一次性的事情?