给出输入时字符串和数组的差异

时间:2017-03-25 10:06:03

标签: c arrays

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

PROG1:

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

int main(void)
{

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

输出:你好

PROG2

#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之间的区别是什么?为什么程序员应该明白这一点?

1 个答案:

答案 0 :(得分:1)

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