char*string是指针,指针在使用的时候需要分配空间,使用malloc分配足够大的空间char*string="hello";是string指向了一个字符串常量,string指向的内容不能修改,只能修改string的地址,但是string执行的地址仍然是null,所以scanf还是会出问题,如果想用scanf最好使用数组,即:charstring[1024]={0};scanf(“%s”,string);
char*string="hello";这样初始化之后,表示指针指向字符串常量,是只读的,不可改变。所以你再向string赋值,就会出错了。正确的程序:#include#include#includeintmain(){char*string=(char*)malloc(10*sizeof(char));//你得申请内存空间scanf("%s",string);if(strcmp(string,"A")==0||strcmp(string,"a")==0)printf("succeeded!\n");elseputs("failed!");puts("\n");system("pause");return0;}
因为你试图访问非法的内存地址:char*string=NULL;时,这个地址是0,直接会表现出来。你说的string没有初始化是指char*string;么?这样也是会出问题的,只是没有表现出来,如果没有初始化string,那么指针的值是一个随机值。只要不是预先分配好的空间,你往里写入东西就是错误的。
#include"stdio.h"voidmain(){charx,y,z;x='a';y='\t';z='b';printf("第1行为:%c%c%c\n",x,y,z);printf("第2行为:%c%c%c%c\n",x,y,y,z);}这个程序是这样写是正确的,你y赋的值是制表符占用八字符位!如果你把x改为字符数组你的源程序就是对的!