初学c编程请教字符串操作段异常
初学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);
}
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);
}