ANSI C проблема с динамическим c массивом и строкой сканирования - PullRequest
0 голосов
/ 14 января 2020

У меня проблема с этой маленькой программой в ANSI C. Я хочу сделать программу с тремя функциями - создать массив Dynami c (stworz_tablice), загрузить строку данных - (pobierz_tablice) и распечатать ее (wypisz_tablice).

Итак, программа работает так: мы даем число для нашего массива, поместите строку, и функция должна записать ее в консоли. Например, введите: 4 Fire

Как я могу исправить код, чтобы он работал?

Я думаю, что проблема с mytab = stworz_tablice(n);, но я пока не знаю, как это исправить.

Когда я запускаю программу, она не принимает строку. Вывод похож на случайные числа вместо букв.

Ввод:

4 Анна

Вывод, который я хочу:

Анна

Вывод, который я получаю каждый раз:

-24244 -24242 0 0 // Некоторые случайные числа, каждый раз разные

#include <stdlib.h>

char *stworz_tablice(int n)
{
    char *mytab = (char*)malloc((n+1) * sizeof(char));
    if (mytab == NULL)
    {
        perror("Error in malloc");
        exit (1);
    }
    return mytab;
}

void pobierz_tablice(char *mytab, int n)
{
    scanf ("%s", mytab);
}

void wypisz_tablice(char mytab[], int n)
{
    for(int i=0; i<n; i++)
        printf("%c",mytab[i]);
}

int main(void)
{
    int *mytab;
    int n;
    scanf("%d", &n);

    if (n<=0)
    {
        printf("BŁĄD");
        return 0;
    }

    mytab = stworz_tablice(n);
    pobierz_tablice(mytab, n);
    wypisz_tablice(mytab, n);

    putchar('\n');
    free(mytab);
    return EXIT_SUCCESS;
}

1 Ответ

0 голосов
/ 14 января 2020

https://godbolt.org/z/zj_QpY

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

char *stworz_tablice(int n)
{
    char *mytab = malloc(n+1); 
    if (mytab == NULL)
    {
        perror("Error in malloc");
        exit (1);
    }
    return mytab;
}

int pobierz_tablice(char *mytab, int n)
{
    return scanf ("%s", mytab);
}

void wypisz_tablice(char mytab[], int n)
{
    for(int i=0; i<n; i++)
        printf("%c",mytab[i]);
}

int main(void)
{
    char *mytab;
    int n;
    scanf("%d", &n);

    if (n<=0)
    {
        printf("BŁĄD");
        return 0;
    }

    mytab = stworz_tablice(n);
    if(pobierz_tablice(mytab, n) != 1)
    {
        perror("Scanf error\n");
        exit (1);
    }
    wypisz_tablice(mytab, n);

    putchar('\n');
    free(mytab);
    return EXIT_SUCCESS;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...