写入文件时的奇怪字符

时间:2016-06-15 20:40:10

标签: c

这是我编写的将文件拆分成部分的代码。代码中的语言无关紧要,我将向您展示相关部分。

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

long meret(FILE* fajl) {

    long jelenlegi = ftell(fajl);
    long meret;

    fseek(fajl, 0L, SEEK_END);

    meret = ftell(fajl);

    fseek(fajl, jelenlegi, SEEK_SET);

    return meret;

}

int main(int argc, char* argv[])
{
    FILE *fp, *fptemp;
    long size, tmpsize;
    int db;
    int ct = 1, i = 0, index = 0, j, z;
    char temp[30];
    char temp2[30];
    char actual[30];
    char filenev[30];
    char s[60];
    char *tmp;
    char filenevsorsz[5];
    char *aktualis, ment[30];

    printf("A hasznalat: \n");
    printf("------------\n\n");
    printf("Elso parancssori argumentum: -d\n");
    printf("Masodik: a file elerhetosege\n");
    printf("Harmadik: darabolasban a darabok maximalis merete byte-ban!\n\n");

    if(argc != 4) {

        printf("Nem jo a hasznalat! Olvasd el a hasznalati utmutatot!");
        return;

    }

    fp = fopen(argv[2], "rt");

    if(!fp) {

        printf("Hiba a file megnyitasakor...");
        return;
    }

    printf("\n\n");
    size = meret(fp);
    printf("A file merete: %d byte\n", size);
    printf("A megadott darabolasi parameter: %s\n\n", argv[3]);
    db = atoi(argv[3]);
    printf("Osszesen %d file-ra kell szamitanunk.\n", (size/30)+1);
    j = 0;

    for(i=0; i<strlen(argv[2])-4; i++) {

        filenev[j++] = argv[2][i];

    }

    tmp = malloc(sizeof(filenev));
    strcpy(tmp,filenev);
    aktualis = malloc(sizeof(db));
    i = 1;

    while(i<=3) {
        printf("Most csinalom a %d. fajlt...", i);
        strcpy(filenev, tmp);
        fread(aktualis, 1, db, fp);
        printf(" Az aktualis sor: %s\n", aktualis);
        strcat(filenev, "00");
        sprintf(filenevsorsz, "%d", i);
        strcat(filenev, filenevsorsz);
        strcat(filenev, ".txt");
        fptemp = fopen(filenev, "a");
        fprintf(fptemp, "%s", aktualis);
        printf("A filenev: %s", filenev);
        tmpsize = meret(fptemp);
        printf("\nA meret: %ld byte\n", tmpsize);
        printf("\n");
        i++;
    }


}

这是做什么的:它读取文件,从文件读取X字节(命令行arg),并从中创建子文件。

例如:test.txt包含30个字节。如果我设置为每个分割10个字节,它将给我: test001.txt test002.txt test003.txt

这是相关部分:

while(i<=3) {
        printf("Most csinalom a %d. fajlt...", i);
        strcpy(filenev, tmp);
        fread(aktualis, 1, db, fp);
        printf(" Az aktualis sor: %s\n", aktualis);
        strcat(filenev, "00");
        sprintf(filenevsorsz, "%d", i);
        strcat(filenev, filenevsorsz);
        strcat(filenev, ".txt");
        fptemp = fopen(filenev, "a");
        fprintf(fptemp, "%s", aktualis);
        printf("A filenev: %s", filenev);
        tmpsize = meret(fptemp);
        printf("\nA meret: %ld byte\n", tmpsize);
        printf("\n");
        i++;
    }

它复制到所有文件(每个10个字节)除了第一个。它会给我一些奇怪的字符,并且我尝试的每个文件都会缩短整个文件4个字节。但每当我尝试打印读取行(30字节)时,它都会打印出来,除了将其打印到文件时,它会给我这个随机字符。有什么建议吗?

0 个答案:

没有答案