我写了两个这样的程序,我正在输入' 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之间的区别是什么?为什么程序员应该明白这一点?
答案 0 :(得分:1)
当您将未初始化的指针传递给scanf()
时,这意味着未定义的行为。因此,在调用scanf之前使用malloc或calloc为指针分配内存。