在C中从键盘读取字符串

时间:2015-09-05 09:19:24

标签: 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("Enter your state : ");
scanf("%s",state);

2 个答案:

答案 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)

为字符串分配内存有两种不同的方法:

  1. char *str = "Some string";这位于不可写的位置。
  2. char str[] = "Some string";它位于堆栈中,因此是可写的。
  3. 因为您试图将指针传递给不可写的位置(然后写入),您将收到错误。如果希望字符串是可变的,则需要在堆栈或堆上分配内存。任何人都可能像kd84建议的那样在堆栈上分配:

    char state[256]; // take any size, that is reasonably high here