我正在尝试从键盘读取字符串并将其存储在字符指针中。但它似乎不起作用。有人可以帮帮我吗。这是代码。
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);
答案 0 :(得分:1)
您没有分配内存来存储状态名称,所以当您尝试使用str编写时,会出现BAD_ACCESS错误。你应该修改你的程序如下(假设最大名称长度为256)。虽然这会从你的堆栈中吃掉256个字节。
int main() {
char state[256];
printf("Enter your state : ");
scanf("%s",state);
return 0;
}
赋值(state = city;)运算符有效,因为您将一个指针值分配给另一个指针,即只将存储在city中的地址复制到state。
答案 1 :(得分:0)
为字符串分配内存有两种不同的方法:
char *str = "Some string";
这位于不可写的位置。char str[] = "Some string";
它位于堆栈中,因此是可写的。因为您试图将指针传递给不可写的位置(然后写入),您将收到错误。如果希望字符串是可变的,则需要在堆栈或堆上分配内存。任何人都可能像kd84建议的那样在堆栈上分配:
char state[256]; // take any size, that is reasonably high here