C 将字符串从文件存储到数组

C 将字符串从文件存储到数组,c,arrays,string,file,C,Arrays,String,File,我从两个文件中读取字符串并将其存储到两个单独的数组中,然后我尝试对它们进行排序并将它们写入另一个文件…这一部分的工作方式与预期相同,但我真正需要做的是将两个数组中的字符串组合成一个,这样我就可以按字母顺序对它们进行排序,然后写入一个文件,但问题是,当我尝试将这两个数组存储到一个数组中时,我得到了分段错误作为错误消息..我真的不知道如何将这两个数组存储到另一个数组中以便按顺序排序…我知道如何排序我只是不知道如何将它们读取到另一个数组中。。。我不能使用#DEFINE,因为我要将所有这些都写入测试代码

我从两个文件中读取字符串并将其存储到两个单独的数组中,然后我尝试对它们进行排序并将它们写入另一个文件…这一部分的工作方式与预期相同,但我真正需要做的是将两个数组中的字符串组合成一个,这样我就可以按字母顺序对它们进行排序,然后写入一个文件,但问题是,当我尝试将这两个数组存储到一个数组中时,我得到了分段错误作为错误消息..我真的不知道如何将这两个数组存储到另一个数组中以便按顺序排序…我知道如何排序我只是不知道如何将它们读取到另一个数组中。。。我不能使用#DEFINE,因为我要将所有这些都写入测试代码的函数中

我试过类似的东西

新[i]=str

而且:

strcpy(新[i],str)

但这两项工作…任何帮助都不会被感激

这是我的密码:

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

main (void)
{
    char str[200];
    char str2[300];
    char new[300];
    char temp [300];
    int linenumber=0;
    FILE *fa = fopen ("book1.dat", "r");
    FILE *fb = fopen ("book2.dat", "r");
    FILE *fc = fopen ("fixed.txt", "w");

    int i=0;
    int j=0;
    int k;

    /*read the strings into an array while it is not the end of file*/
    while(!feof(fa)&& !feof(fb))
    {
        linenumber++;
       fscanf(fa,"%[^\n]\n",str);
       fscanf(fb,"%[^\n]\n",str2);

       /*compare strings in array and write to array*/
       if(strcmp(str2, str)<0)
       {
           fprintf(fc, "%s\n", str2);
           fprintf(fc, "%s\n", str);
       }

       if (strcmp(str2,str)>0)
       {
           fprintf(fc, "%s\n", str);
           fprintf(fc, "%s\n", str2)
       }

       /*print out the results of str */
       printf("%s", str);
    }
}
#包括
#包括
主(空)
{
char-str[200];
char-str2[300];
char-new[300];
煤焦温度[300];
int linenumber=0;
文件*fa=fopen(“book1.dat”、“r”);
文件*fb=fopen(“book2.dat”、“r”);
文件*fc=fopen(“fixed.txt”,“w”);
int i=0;
int j=0;
int k;
/*在数组不是文件结尾时将字符串读入数组*/
而(!feof(fa)和&!feof(fb))
{
linenumber++;
fscanf(fa,“%[^\n]\n”,str);
fscanf(fb,“%[^\n]\n”,str2);
/*比较数组中的字符串并写入数组*/
如果(strcmp(str2,str)0)
{
fprintf(fc,“%s\n”,str);
fprintf(fc,“%s\n”,str2)
}
/*打印str的结果*/
printf(“%s”,str);
}
}

新建一个char*数组,并使用strdup复制str中包含的字符串。

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

typedef char* Type;

typedef struct vector {
    size_t size;
    size_t capacity;
    Type *array;
} Vector;

Vector *vec_make(){
    Vector *v;
    v = (Vector*)malloc(sizeof(Vector));
    v->size = 0;
    v->capacity=16;
    v->array=(Type*)realloc(NULL, sizeof(Vector)*(v->capacity *= 2));
    return v;
}

void vec_add(Vector *v, Type value){
    v->array[v->size] = value;
    if(++v->size == v->capacity)
        v->array=(Type*)realloc(v->array, sizeof(Vector)*(v->capacity *= 2));
}

size_t vec_size(Vector *v){
    return v->size;
}

Type *vec_getArray(Vector *v){
    return v->array;
}

void vec_free(Vector *v){
    free(v->array);
    free(v);
}

int cmp(const void *a, const void *b){
    return strcmp(*(char**)a, *(char**)b);
}

void merge(const char *inpfile1, const char *inpfile2, const char *outfile){
    FILE *fp;
    char buff[256], **array;
    Vector *v;
    size_t c, size;

    v = vec_make();
    fp=fopen(inpfile1, "r");
    while(NULL!=fgets (buff, 256, fp))
        vec_add(v, strdup(buff));
    fclose(fp);

    fp=fopen(inpfile2, "r");
    while(NULL!=fgets (buff, 256, fp))
        vec_add(v, strdup(buff));
    fclose(fp);

    array=vec_getArray(v);
    size=vec_size(v);
//  qsort(array, size, sizeof(Type), cmp);
    fp=fopen(outfile, "w");
    for(c=0;c < size; ++c){
        fputs(array[c], fp);
        free(array[c]);
    }
    fclose(fp);
    vec_free(v);
}

int main(){
    merge("book1.txt", "book2.txt", "fixed.txt");
    return 0;
}
#包括 #包括 typedef char*类型; typedef结构向量{ 大小; 容量大小; 类型*数组; }载体; 向量*vec_make(){ 向量*v; v=(向量*)malloc(向量的大小); v->size=0; v->容量=16; v->array=(Type*)realloc(NULL,sizeof(Vector)*(v->capacity*=2); 返回v; } void vec_add(向量*v,类型值){ v->array[v->size]=值; 如果(++v->大小==v->容量) v->array=(Type*)realloc(v->array,sizeof(Vector)*(v->capacity*=2)); } 大小向量大小(向量*v){ 返回v->size; } 类型*vec_getArray(Vector*v){ 返回v->array; } 无矢量无效(矢量*v){ 自由(v->数组); 免费(五); } int cmp(常数无效*a,常数无效*b){ 返回strcmp(*(字符**)a、*(字符**)b); } 无效合并(常量字符*inpfile1,常量字符*inpfile2,常量字符*outfile){ 文件*fp; 字符buff[256],**数组; 向量*v; 尺寸c,尺寸; v=向量生成(); fp=fopen(inpfile1,“r”); while(NULL!=fgets(buff,256,fp)) vec_add(v,strdup(buff)); fclose(fp); fp=fopen(inpfile2,“r”); while(NULL!=fgets(buff,256,fp)) vec_add(v,strdup(buff)); fclose(fp); 数组=vec_getArray(v); 大小=向量大小(v); //qsort(数组、大小、sizeof(类型)、cmp); fp=fopen(输出文件,“w”); 对于(c=0;c
如何将这些数据读入另一个数组是什么意思?是否要合并这两个字符串?你想要一个字符串数组吗?是的,我正在尝试将数组str和str2中的字符串放入数组new中,这样我就可以按字母顺序对数组new中的所有字符串进行排序,但我不知道如何将它们合并到一个字符串数组中。。。