首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

初学c编程请教字符串操作段异常

2012-03-21 
初学c编程请问字符串操作段错误void game_start(){char* g_sta_str//大于玩家名字数组长度30的数组int g_

初学c编程请问字符串操作段错误
void game_start()
  {
  char* g_sta_str;//大于玩家名字数组长度30的数组
  int g_sta_len;//用户输入昵称的长度
  printf(" 请输入你的昵称吧!\n");
  fflush(stdin);//
  scanf("%s",g_sta_str); 
   
  g_sta_len = strlen(g_sta_str);
  while (g_sta_len < 1 || g_sta_len > 30)
  {
  printf("你输入的昵称长度不合法 请重新输入!\n");
  printf("请输入你的昵称!\n");
   
  }
  printf("欢迎来到游戏 ^_^ %s\n",g_sta_str);
  g_player* p_ptr= (g_player*)malloc(sizeof(g_player)*2);  
  char* _p_tep_name = p_ptr -> p_name;
  while (*g_sta_str)
  {
  *_p_tep_name = *g_sta_str; 
  g_sta_str ++; 
  *_p_tep_name ++;  
   
  }
}

[解决办法]
这里char* g_sta_str;实际上没分配内存
scanf("%s",g_sta_str);在这里就错了

scanf前面加上malloc给g_sta_str分配内存就不会出现段错误了
或者g_sta_str用数组
[解决办法]
你用gdb调试一下,使用gdb可以定位到出现段错误的行。
while (g_sta_len < 1 || g_sta_len > 30)
{
printf("你输入的昵称长度不合法 请重新输入!\n");
printf("请输入你的昵称!\n");

}
你这儿的逻辑是不是有问题,当然这和段错误没关系,我想应该改成这样的吧:
while (g_sta_len < 1 || g_sta_len > 30)
{
printf("你输入的昵称长度不合法 请重新输入!\n");
printf("请输入你的昵称!\n");
scanf("%s",g_sta_str);
g_sta_len = strlen(g_sta_str);

}

热点排行