
C语言(数据结构)字符串赋值函数求改错!~!~!!~
#include"stdio.h"#include"stdlib.h"#include"string.h"#defineMAXSTRLEN256#defineMAXSTR...
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define MAXSTRLEN 256
#define MAXSTRSIZE 256
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct {char *ch;
int length;
}hstring;
Status strassign(hstring &t,char *chars){
//生成一个其值等于串常量chars的串t
int i,j;
if(t.ch) free(t.ch);
i=strlen(chars);
if(!i) { t.ch=NULL; t.length=0; }
else{
if(!(t.ch=(char *)malloc(i*sizeof(char))))
exit(OVERFLOW);
for(j=0;j<i;j++)
t.ch[j]=chars[j];
t.length=i;
}
}
void main()
{ hstring *t;
int i;
char s[80]="vamos argentina.\n";
strassign(t,s);//32行
for(i=0;t.ch[i]!="\0";i++) printf("%c",t.ch[i]);}//33行
错误:
1>d:\制作留念\leostrings\leostrings\strings.cpp(18) : warning C4267: “=”: 从“size_t”转换到“int”,可能丢失数据
1>d:\制作留念\leostrings\leostrings\strings.cpp(32) : error C2664: “strassign”: 不能将参数 1 从“hstring *”转换为“hstring &”
1>d:\制作留念\leostrings\leostrings\strings.cpp(33) : error C2228: “.ch”的左边必须有类/结构/联合
1> 类型是“hstring *”
1> 是要改用“->”吗?
1>d:\制作留念\leostrings\leostrings\strings.cpp(33) : error C2228: “.ch”的左边必须有类/结构/联合
1> 类型是“hstring *”
1> 是要改用“->”吗? 展开
#include"stdlib.h"
#include"string.h"
#define MAXSTRLEN 256
#define MAXSTRSIZE 256
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct {char *ch;
int length;
}hstring;
Status strassign(hstring &t,char *chars){
//生成一个其值等于串常量chars的串t
int i,j;
if(t.ch) free(t.ch);
i=strlen(chars);
if(!i) { t.ch=NULL; t.length=0; }
else{
if(!(t.ch=(char *)malloc(i*sizeof(char))))
exit(OVERFLOW);
for(j=0;j<i;j++)
t.ch[j]=chars[j];
t.length=i;
}
}
void main()
{ hstring *t;
int i;
char s[80]="vamos argentina.\n";
strassign(t,s);//32行
for(i=0;t.ch[i]!="\0";i++) printf("%c",t.ch[i]);}//33行
错误:
1>d:\制作留念\leostrings\leostrings\strings.cpp(18) : warning C4267: “=”: 从“size_t”转换到“int”,可能丢失数据
1>d:\制作留念\leostrings\leostrings\strings.cpp(32) : error C2664: “strassign”: 不能将参数 1 从“hstring *”转换为“hstring &”
1>d:\制作留念\leostrings\leostrings\strings.cpp(33) : error C2228: “.ch”的左边必须有类/结构/联合
1> 类型是“hstring *”
1> 是要改用“->”吗?
1>d:\制作留念\leostrings\leostrings\strings.cpp(33) : error C2228: “.ch”的左边必须有类/结构/联合
1> 类型是“hstring *”
1> 是要改用“->”吗? 展开
展开全部
错误有:
1.if(t.ch) free(t.ch);有问题,因为t.ch没有赋初值,在主函数中应加上t.ch=NULL;
2.hstring *t;和Status strassign(hstring &t,char *chars)调用t时形式不匹配,指针和引用,可改为:hstring t;或Status strassign(hstring *t,char *chars)
3.在strassign函数中的t.length=i;后加上t.ch[i]='\0';串结束标志。
4.strassign函数要有返回值。
你运行下面修改后的程序
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define MAXSTRLEN 256
#define MAXSTRSIZE 256
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct {char *ch;
int length;
}hstring;
Status strassign(hstring &t,char *chars){
//生成一个其值等于串常量chars的串t
int i,j;
if(t.ch) free(t.ch);
i=strlen(chars);
if(!i) { t.ch=NULL; t.length=0; }
else{
if(!(t.ch=(char *)malloc(i*sizeof(char))))
exit(OVERFLOW);
for(j=0;j<i;j++)
t.ch[j]=chars[j];
t.length=i;
t.ch[i]='\0';
}
return TRUE;
}
void main()
{ hstring t;
int i;t.ch=NULL;
char s[80]="vamos argentina.\n";
strassign(t,s);//32行
for(i=0;t.ch[i]!='\0';i++) printf("%c",t.ch[i]);}//33行
1.if(t.ch) free(t.ch);有问题,因为t.ch没有赋初值,在主函数中应加上t.ch=NULL;
2.hstring *t;和Status strassign(hstring &t,char *chars)调用t时形式不匹配,指针和引用,可改为:hstring t;或Status strassign(hstring *t,char *chars)
3.在strassign函数中的t.length=i;后加上t.ch[i]='\0';串结束标志。
4.strassign函数要有返回值。
你运行下面修改后的程序
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define MAXSTRLEN 256
#define MAXSTRSIZE 256
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct {char *ch;
int length;
}hstring;
Status strassign(hstring &t,char *chars){
//生成一个其值等于串常量chars的串t
int i,j;
if(t.ch) free(t.ch);
i=strlen(chars);
if(!i) { t.ch=NULL; t.length=0; }
else{
if(!(t.ch=(char *)malloc(i*sizeof(char))))
exit(OVERFLOW);
for(j=0;j<i;j++)
t.ch[j]=chars[j];
t.length=i;
t.ch[i]='\0';
}
return TRUE;
}
void main()
{ hstring t;
int i;t.ch=NULL;
char s[80]="vamos argentina.\n";
strassign(t,s);//32行
for(i=0;t.ch[i]!='\0';i++) printf("%c",t.ch[i]);}//33行
展开全部
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#define MAXSTRLEN 256
#define MAXSTRSIZE 256
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct
{
char *ch;
int length;
}hstring;
Status strassign(hstring &t,char *chars)
{
//生成一个其值等于串常量chars的串t
int i,j;
if(t.ch)
free(t.ch);
i=strlen(chars);
if(!i)
{
t.ch=NULL;
t.length=0;
}
else
{
if(!(t.ch=(char *)malloc(i*sizeof(char))))
exit(OVERFLOW);
for(j=0;j<=i;j++)//这里应该循环到i,这样'\0'就能复制进去了,strlen是不把'\0'算进去@@@@@@@@@@@@@@
t.ch[j]=chars[j];
t.length=i;
}
return 0;//返回值得有@@@@@@@@@@@@@@@@@@@@@@
}
void main()
{
hstring t;//把指针改为变量@@@@@@@@@@@@@@@@@@@@@@
t.ch=NULL;//初始化@@@@@@@@@@@@@@@@@@@@@@
t.length=0;//初始化@@@@@@@@@@@@@@@@@@@@@@
int i;
char s[80]="vamos argentina.\n";
strassign(t,s);//32行
for(i=0;t.ch[i]!='\0';i++)// "\0"是字符串,'\0'才是字符@@@@@@@@@@@@@@@@@@@@@@
printf("%c",t.ch[i]);
}//33行
#include"stdlib.h"
#include"string.h"
#define MAXSTRLEN 256
#define MAXSTRSIZE 256
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OVERFLOW -2
typedef int Status;
typedef struct
{
char *ch;
int length;
}hstring;
Status strassign(hstring &t,char *chars)
{
//生成一个其值等于串常量chars的串t
int i,j;
if(t.ch)
free(t.ch);
i=strlen(chars);
if(!i)
{
t.ch=NULL;
t.length=0;
}
else
{
if(!(t.ch=(char *)malloc(i*sizeof(char))))
exit(OVERFLOW);
for(j=0;j<=i;j++)//这里应该循环到i,这样'\0'就能复制进去了,strlen是不把'\0'算进去@@@@@@@@@@@@@@
t.ch[j]=chars[j];
t.length=i;
}
return 0;//返回值得有@@@@@@@@@@@@@@@@@@@@@@
}
void main()
{
hstring t;//把指针改为变量@@@@@@@@@@@@@@@@@@@@@@
t.ch=NULL;//初始化@@@@@@@@@@@@@@@@@@@@@@
t.length=0;//初始化@@@@@@@@@@@@@@@@@@@@@@
int i;
char s[80]="vamos argentina.\n";
strassign(t,s);//32行
for(i=0;t.ch[i]!='\0';i++)// "\0"是字符串,'\0'才是字符@@@@@@@@@@@@@@@@@@@@@@
printf("%c",t.ch[i]);
}//33行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询