На вывод попадают лишние символы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

При многократном (а иногда и при первом) вводе и выводе данных к выводимому начинает пририсовывать какие-то рожицы и прочие непечатные символы. Программа принимает текст произвольных размеров, ищет в нем идентификаторы (слова начинающиеся с цифры, в данном случае) и создает новый текст, в котором нет строчек, в которых нет идентификаторов. Вот код ввода:
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#include<string.h>
 
char**txt=NULL, **novii_txt=NULL,**txt2=NULL;
    int vibor,stroki,nov_stroki,end,m1,stroki2;
    stroki=m1=vibor=0;
    end=1;
    char b[80];
    int i,z;
        i=0;
 
//заголовок функции и проч. ...
//...
        
                puts("\nVvedite text: ");
        fflush(stdin);
        gets(b);
        z=0;
        while(z!=1)
            if(b[0]!='\0')
                {
                txt2=(char**)realloc(txt2,i+1*sizeof(char*));
                txt2[i]=(char*)malloc((strlen(b)+1)*sizeof(char));
                strcpy(txt2[i],b);
                i++;
                gets(b);
                z=0;
                }
            else
                z=1;
                stroki2=i;
                                txt=txt2;
                getch();
Вот код функции вывода:
void VIVOD_TEXTA(char**txt3,int stroki3)
    {
    int i;
    printf("TEXT:\n\n");
    for(i=0;i<stroki3;i++)
        puts(*(txt3+i));
    getch();
    }
И все время выводит сам текст+ еще несколько символов в конце строки в виде каких-то загогулин и рожиц! Просто ума не приложу где тут ошибка. По идее- что с памятью, где-то счетчик цикла выбегает за границу массива, но на мой взгляд все точно...

Решение задачи: «На вывод попадают лишние символы»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
#include <conio.h>
 
void VIVOD_TEXTA (const char * ptr)
{
    printf("TEXT:\n\n%s\n", ptr);
    getch();
}
 
int main (int argc, char * argv[])
{
    char b[80];
    memset(b, 0, sizeof(b));
 
    puts("\nVvedite text: ");
    fflush(stdin);
    fgets(b, sizeof(b) - 1, stdin);
 
    VIVOD_TEXTA(b);
 
    return 0;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек для работы с файлами и стандартными функциями
  2. Определение функции вывода текста с указанием указателя на текст
  3. Ввод текста с помощью функции fgets в массив b
  4. Вывод текста с помощью функции printf и получение сигнала конца файла с помощью функции getch
  5. Вызов функции вывода текста с указанием введенного текста в качестве аргумента
  6. Конец программы с возвратом значения 0

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.6 из 5
Похожие ответы