c语言字符串赋值给结构体内字符串数组的问题
我想从键盘输入的很多字符组成的字符串截取前12个做有效字符赋值给链表里一个节点的name[13]我的截取函数是这么写的,执行完了是我想要的值char*input_chec...
我想从键盘输入的很多字符组成的字符串截取前12个做有效字符赋值给链表里一个节点的name[13]
我的截取函数是这么写的,执行完了是我想要的值
char* input_check_char(char input_data[],int data_len,int need_len)//input_data[]待截取字符串,data_len
//为待截取字符串的长度,need_len是结构体中相应字段的长度
{
char char_need[need_len];
char* pn=char_need;
char* pd=input_data;
int i=0;
if(data_len<=need_len)
{
pn=input_data;
}
else
{
while(*pd!='\n')
{
if( *pn=='\n')
{
*(pn+i)='\n';
break;
}
else
{
*(pn+i)=*pd;
}
pd++;
i++;
}
}
//char_need[need_len]='\0';//取程序所要长度的字符串以\0截断
printf("%s\n",pn);
return pn;
}
到了结构体赋值是我用strcpy(move->userName,pn);的,完了又监测到pn是我要的,move->userName就前8个是好的后面就是乱码,何解? 展开
我的截取函数是这么写的,执行完了是我想要的值
char* input_check_char(char input_data[],int data_len,int need_len)//input_data[]待截取字符串,data_len
//为待截取字符串的长度,need_len是结构体中相应字段的长度
{
char char_need[need_len];
char* pn=char_need;
char* pd=input_data;
int i=0;
if(data_len<=need_len)
{
pn=input_data;
}
else
{
while(*pd!='\n')
{
if( *pn=='\n')
{
*(pn+i)='\n';
break;
}
else
{
*(pn+i)=*pd;
}
pd++;
i++;
}
}
//char_need[need_len]='\0';//取程序所要长度的字符串以\0截断
printf("%s\n",pn);
return pn;
}
到了结构体赋值是我用strcpy(move->userName,pn);的,完了又监测到pn是我要的,move->userName就前8个是好的后面就是乱码,何解? 展开
2个回答
展开全部
//第一 你的 函数char* input_check_char(char input_data[],int data_len,int need_len)里面
//这样声明的 char char_need[need_len]; 是不对的 需要动态声明
//其次 的确要加上 你注释掉的这行//char_need[need_len]='\0'; 不过内容要改一下
下面看我代码
//运行结果 第一个在 函数中输出的 第二次是在main函数中输出的
abc
abc
Press any key to continue
#include <stdio.h>
#include <string.h>
#include <malloc.h>
char* input_check_char(char input_data[],int data_len,int need_len)//input_data[]待截取字符串,data_len
//为待截取字符串的长度,need_len是结构体中相应字段的长度
{
char *char_need =(char*)malloc(sizeof(char)*need_len+1); //按照传入参数动态申请字符串数组
char* pd=input_data;
int i=0;
if(data_len<=need_len)
{
char_need=input_data;
}
else
{
while(i<need_len)
{
if( *char_need=='\n')
{
*(char_need+i)='\n';
break;
}
else
{
*(char_need+i)=*pd;
}
pd++;
i++;
}
}
*(char_need+i)='\0';//取程序所要长度的字符串以\0截断//添加截断
printf("%s\n",char_need);
return char_need;
}
main()
{
char *p,s[]="abcdegfghjkdfdfg";
p=input_check_char(s,strlen(s),3);
printf("%s\n",p);
free(char_need); //释放动态指针
}
//这样声明的 char char_need[need_len]; 是不对的 需要动态声明
//其次 的确要加上 你注释掉的这行//char_need[need_len]='\0'; 不过内容要改一下
下面看我代码
//运行结果 第一个在 函数中输出的 第二次是在main函数中输出的
abc
abc
Press any key to continue
#include <stdio.h>
#include <string.h>
#include <malloc.h>
char* input_check_char(char input_data[],int data_len,int need_len)//input_data[]待截取字符串,data_len
//为待截取字符串的长度,need_len是结构体中相应字段的长度
{
char *char_need =(char*)malloc(sizeof(char)*need_len+1); //按照传入参数动态申请字符串数组
char* pd=input_data;
int i=0;
if(data_len<=need_len)
{
char_need=input_data;
}
else
{
while(i<need_len)
{
if( *char_need=='\n')
{
*(char_need+i)='\n';
break;
}
else
{
*(char_need+i)=*pd;
}
pd++;
i++;
}
}
*(char_need+i)='\0';//取程序所要长度的字符串以\0截断//添加截断
printf("%s\n",char_need);
return char_need;
}
main()
{
char *p,s[]="abcdegfghjkdfdfg";
p=input_check_char(s,strlen(s),3);
printf("%s\n",p);
free(char_need); //释放动态指针
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询