Почему я не могу объединить для перестроения и массивов цифр содержимое c char из текстового файла?

программа не работает. Я хочу перестроить содержимое текстового файла, например: a1b2c3 как - a1b2c3123, цифры в конце файла

    int counterc=0;
    int counterd=0;
    char rebuild[100];
    char digits[100];
    char c;
    int i;
    FILE *fp;

    fp=fopen("1.txt","r");
    if(fp==NULL)
    {
        printf("\nERROR: File not found for opening\n");
    }
    else
    {
        while(c=fgetc(fp))
        {
            if(c==EOF)
            {
                break;
            }
            if(isdigit(c))
            {
                counterd++;
                strcat(digits,c);
            }
            else
            {
                counterc++;


                strcat(rebuild,c);
            }
        }
    }
    fclose(fp);
    printf("\nNumber of digits: %d ",counterd);
    printf("\nNumber of characters: %d",counterc);

    printf("\nThe content of digits[]: ");

    for( i=0; i<3; i++)
    {
        printf("%s ",digits[i]);
    }
    return 0;
}

если я не использую strcat(rebuild,c), он напечатает мне количество символов, если я не использую strcat(digits,c), он напечатает мне количество цифр, почему я не могу собрать в массиве цифр символы, которые являются цифрами?


person ad3luta    schedule 25.10.2020    source источник
comment
strcat() предназначен для объединения двух строк, а не для добавления одного символа. Оба аргумента strcat() должны быть указателями.   -  person MikeCAT    schedule 25.10.2020
comment
printf("%s ",digits[i]); тоже неправильно. %c следует использовать для печати одного символа.   -  person MikeCAT    schedule 25.10.2020


Ответы (1)


Функция strcat ожидает две строки, заканчивающиеся нулем (массивы символов). В вашей программе c - это символ, а не массив символов.

Массивы символов с завершающим нулем — это массивы с нулевым символом '\0', используемым в качестве ограничителя строки. Массив больше, чем то, что вы храните внутри.

ПРИВЕТ =› 'Ч' | 'Е' | 'Л' | 'Л' | 'О' | '\0' | мусор | мусор | и т.п.

person Sebastien    schedule 25.10.2020