#include <stdio.h>
#include <string.h>
int main()
{
char str[100]={0};
//char *str=NULL;
gets(str);
printf(“%s”,str);
//fgets(str,100,stdin);
//fputs(str,stdout);
return 0;
}
如上,本人用char str[100]={0};初始化数组,运行后无错误。但是这样:char str[100]; *str=NULL;运行会提示出错。本人的问题是以上两种语句作用不同么?另外int *p与 *p 有什么区别呢?例如说char *str=NULL,与*str=NULL有什么区别
#include <string.h>
int main()
{
char str[100]={0};
//char *str=NULL;
gets(str);
printf(“%s”,str);
//fgets(str,100,stdin);
//fputs(str,stdout);
return 0;
}
如上,本人用char str[100]={0};初始化数组,运行后无错误。但是这样:char str[100]; *str=NULL;运行会提示出错。本人的问题是以上两种语句作用不同么?另外int *p与 *p 有什么区别呢?例如说char *str=NULL,与*str=NULL有什么区别
解决方案
5
char str[100]; *str=NULL;
等价于
char str[100]; str[0]=NULL;
C++中, NULL一般就是0,这句一般合法,C中NULL一般是 (void*)0,这就不行了,
怎能将指针付给char类型的数据呢
5
char str[100]={0};
这是在栈上分配了100个char内存,所以可以往这里面写东西
//char *str=NULL;
这个就一个指针,没分配内存,试图往它指向的内存写东西自然就挂了
这是在栈上分配了100个char内存,所以可以往这里面写东西
//char *str=NULL;
这个就一个指针,没分配内存,试图往它指向的内存写东西自然就挂了
5
char str[100] = {0}; 会将 str 的全部元素初始化为 0 。
数组不是指针,不能被赋值,给数组赋值(str = NULL) 是错误的。
15
你啥地方见过给数组赋值NULL这种用法?c++里面有么?
千万不要不确定的情况下误导人
实际测试一下就知道
char test[20];
test = NULL;
编译结果:error: incompatible types when assigning to type ‘char[20]’ from type ‘void *’
在c里面,数组初始化,一般来说就是示例中的赋值0,或memset为0,从来不可能出现NULL的用法,NULL一般只能给指针赋值,如 char *test = NULL;或 char *test;test = NULL;
题主对指针还是不太明白,需要再去看看教材。*test表明的是test指向的内容了,那么假如执行 *test = NULL;那么会给你一个警告,warning: assignment makes integer from pointer without a cast,test是指针,NULL是指针,而*test指的是内容
例如
int x = 12;
int *p;
p = NULL;
*p = 12;
p = &x;
本人装个编译环境,对不清楚的代码进行直接编译运行测试,对警告和错误进行分析,可以找到问题的原因。
10
char *str=NULL; 是在声明变量,并初始化为NULL,变量类型是char*类型, 这里*是代表是指针类型
*str=NULL 这里的*解引指针,也就是说让指针提向的值赋值为NULL
两处的*不是同一个意思
*str=NULL 这里的*解引指针,也就是说让指针提向的值赋值为NULL
两处的*不是同一个意思