#include<stdio.h> #include<stdlib.h> #define N 1000001 struct Array { int a[N]; int alength; int b[N]; int blength; int num; }; void ShowArray(struct Array* array) { printf("c数组元素有:"); for(int i=0;i<(array->alength);i++) printf("%d ",array->a[i]); printf("\n"); } void CreateArray(struct Array* array,int a,int b) { //array = (struct Array*)malloc(sizeof(array)); /*array->alength = 0; array->blength = 0; array->num = 0;*/ printf("a数组元素有:"); for(int i=0;i<a;i++) { scanf("%d",&(array->a[i])); array->alength++; } array->alength = a; ShowArray(array); printf("b数组元素有:"); for(int i=0;i<b;i++) { scanf("%d",&(array->b[i])); array->blength++; } } void SortArray(struct Array* array) { int i = 0; int j = array->alength - array->blength; while((i!=array->alength - array->blength)&&(j!=array->alength)) { if(array->a[i]>array->a[j]) { array->num = array->a[j]; array->a[j] = array->a[i]; array->a[i] = array->num; i++; j++; } else if(array->a[i]<array->a[j]) { i++; j++; } else { array->num = array->a[j+1]; array->a[j+1] = array->a[i]; array->a[i] = array->num; i++; } } } void MergeArray(struct Array* array) { int j = array->alength; array->alength = + array->blength; for(int i=0;i<array->blength;i++) array->a[j] = array->b[i]; SortArray(array); ShowArray(array); } int main() { struct Array* array; int v,r; printf("a数组的长度为:"); scanf("%d",&v); printf("b数组的长度为:"); scanf("%d",&r); CreateArray(array,v,r); MergeArray(array); return 0; } 上面代码哪里错了?
时间: 2024-04-16 10:28:25 浏览: 122
代码中存在两处错误:
1. 在函数CreateArray中,结构体指针array没有分配内存。需要使用malloc函数为其分配内存空间。可以将注释的部分取消注释,或者在函数内部添加malloc语句:
```c
array = (struct Array*)malloc(sizeof(struct Array));
```
2. 在函数MergeArray中,计算array->alength时错误地使用了"+="运算符。应该使用赋值运算符"="来更新array->alength的值:
```c
array->alength = array->alength + array->blength;
```
相关问题
#define MaxSize 100000 #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct{ ElemType data[MaxSize]; int length; }List; void InitList(List &l){ l.length=0; } void swap(int *a,int *b) { int t=*a;*a=*b;*b=t; } int InsElem(List &l,ElemType x,int i){ int j; if(i<1||i>l.length+1) return 0; for(j=l.length;j>i;j--) l.data[j]=l.data[j-1]; l.data[i-1]=x; l.length++; return 1; }
这段代码定义了一个线性表的结构体,并实现了初始化函数和插入元素的函数。具体来说:
- 宏定义了线性表的最大长度为 100000。
- 定义了元素类型 ElemType 为 int。
- 定义了结构体 List,包含一个 int 数组 data 和一个表示数组长度的 int 变量 length。
- 实现了初始化函数 InitList,用于将线性表 l 的长度 length 初始化为 0。
- 实现了插入元素函数 InsElem,用于在线性表 l 的第 i 个位置插入元素 x。若 i 不合法(小于 1 或大于 length+1),则返回 0;否则将第 i 个位置以及之后的所有元素后移一位,再将 x 插入到第 i 个位置。最后将线性表长度加 1,并返回 1 表示插入成功。
需要注意的是,这段代码并没有进行越界检查,如果线性表长度已经达到了最大值 MaxSize,继续插入元素将导致数组越界。同时,插入元素函数也没有判断线性表是否已满,同样可能导致数组越界。
#include<stdio.h> #include<stdlib.h> #include<string.h> #define MAXSIZE 100 typedef char datatype; typedef struct l{ datatype str[MAXSIZE]; int length; }seqstring; int index(seqstring S,seqstring T) { int i,j,succ; i=0; succ=0; while(i<=S.length-T.length&&!succ) { j=0; succ=1; while(j<=T.length&&succ) { if(T.str[j]==S.str[i+j]) { ++j; } else { succ=0; } i++; } } if(succ) { return(i); } else { return -1; } } int main() { seqstring S,T; int i,max; max=20; S.str={a,b,c,d,s,d,f}; S.length=strlen(&S); printf("字符串S的字符个数为:%d\n",S.length); T.str={c,d}; scanf("%s",&T); T.length=strlen(&T); printf("字符串S的字符个数为:%d",T.length); index(S,T); return 0; }
这个程序中有一些问题。
首先,在定义字符串S和T时,你不能直接使用大括号初始化字符串,而应该使用双引号或单引号。例如:
```
S.str = "abcdsdf";
```
其次,在计算S和T的长度时,你应该使用strlen函数,而不是使用&运算符。例如:
```
S.length = strlen(S.str);
```
最后,在调用index函数时,你应该将其返回值保存在一个变量中,然后输出这个变量的值。例如:
```
int pos = index(S, T);
printf("T在S中的位置为:%d\n", pos);
```
这样才能正确输出函数的结果。
阅读全文
相关推荐

















