用C语言从键盘读取字符串
我试图从键盘读取字符串并将其存储在字符指针中。但它似乎不起作用。谁能帮帮我吗。这是代码用C语言从键盘读取字符串,c,string,pointers,exc-bad-access,C,String,Pointers,Exc Bad Access,我试图从键盘读取字符串并将其存储在字符指针中。但它似乎不起作用。谁能帮帮我吗。这是代码 char *city = "Bangalore"; char *state; state = city; printf("Enter your state : "); scanf("%s",state); // I get Bad access here. 但当我用这个的时候不会崩溃 char city[] = "Bangalore"; char *state = city; printf("Ente
char *city = "Bangalore";
char *state;
state = city;
printf("Enter your state : ");
scanf("%s",state); // I get Bad access here.
但当我用这个的时候不会崩溃
char city[] = "Bangalore";
char *state = city;
printf("Enter your state : ");
scanf("%s",state);
您没有分配内存来存储状态名,因此当您尝试在str中写入时,会出现错误的访问错误。您应该按如下方式修复程序(假设最大名称长度为256)。但这将消耗堆栈中的256字节
int main() {
char state[256];
printf("Enter your state : ");
scanf("%s",state);
return 0;
}
赋值(state=city;)运算符之所以有效,是因为您正在将一个指针值赋值给另一个指针,即仅将存储在city中的地址复制到state 为字符串分配内存有两种不同的方法:
char*str=“一些字符串”代码>它位于不可写位置
charstr[]=“一些字符串”代码>它位于堆栈上,因此是可写的
char state[256]; // take any size, that is reasonably high here
您需要分配内存,以便以任何可预测的行为写入内存,但状态指向城市,对吗?因此,它有一个内存位置,而不是一个悬空指针。城市是一个常量字符串,您不能覆盖它。看见要修复此问题,只需在写入堆栈之前在堆栈或堆上分配状态即可