gpt4 book ai didi

c - 在 C 中打印数组时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:31:49 27 4
gpt4 key购买 nike

<分区>

#include<stdlib.h>
#include<stdio.h>
#include<string.h>

//This program is a sorting application that reads a sequence of numbers from a file and prints them on the screen . The reading from the file here , is a call back function .

typedef int (*CompFunc)(const char* , const char* );
typedef int (*ReadCheck)(char nullcheck);
char array[100];

//Let this function be done in the library itself. It doesn't care as to where the compare function and how is it implemented. Meaning suppose the function wants to do sort in ascending order or in descending order then the changes have to be done by the client code in the "COMPARE" function who will be implementing the lib code.

void ReadFile(FILE *fp,ReadCheck rc)
{
char a;
char d[100];
int count = 0,count1=0;
a=fgetc(fp);
//printf("%c",a);
//count1=(*rc)(a);
//printf("%d",count1);
while (1 !=(*rc)(a) )
{ if(a==' ')
{

d[count1]='\0';
strcpy(&array[count],d);
count=count+1;
printf("%s \n",d);
memset(d,'\0',100);
count1=0;
}
else
{

d[count1]=a;
count1=count1+1;
//a=fgetc(fp);

}
//printf("%c",a);
a=fgetc(fp);
}

}
void Bubblesort(char* array , int size , int elem_size , CompFunc cf)
{ int i,j,k;
int *temp;
for( i=0;i < size ;i++)
{
for ( j=0;j < size -1 ; j++)
{
// make the callback to the comparision function
if(1 == (*cf)(array+j*elem_size,array+ (j+1)*elem_size))
{
//interchanging of elements
temp = malloc(sizeof(int *) * elem_size);
memcpy(temp , array+j*elem_size,elem_size);
memcpy(array+j*elem_size,array+(j+1)*elem_size,elem_size);
memcpy(array + (j+1)*elem_size , temp , elem_size);
free(temp);
}
}
}

for (k=0;k<5;k++)
printf("%s \n",array[k]);
}



//Let these functions be done at the client side

int Compare(const char* el1 , const char* el2)
{
int element1 = *(int*)el1;
int element2 = *(int*)el2;

if(element1 < element2 )
return -1;
if(element1 > element2)
return 1 ;
return 0;
}

int ReadChecked(char nullcheck)
{
if (nullcheck=='\n')
return 1;
else
return 0;
}
int main()
{
FILE *fp1;
int k;
fp1=fopen("readdata.txt","r");
ReadFile(fp1,&ReadChecked);
for (k=0;k<5;k++)
printf("%s \n",array[k]);
Bubblesort((char*)array,5,sizeof(array[0]),&Compare);
printf("after sorting \n");
for (k=0;k<5;k++)
printf("%s \n",array[k]);

return 0;
}

数组有数据

    123
11
2312
121
231

它应该以完全相同的方式打印数据。即使它在最后打印它给出了段错误。

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com