首页 > 解决方案 > 动态数组和扫描字符串的 ANSI C 问题

问题描述

我在 ANSI C 中遇到了这个小程序的问题。我想制作一个具有三个函数的程序 - 创建一个动态数组 (stworz_tablice),加载数据 - 字符串 (pobierz_tablice) 并打印它 (wypisz_tablice)。

所以程序是这样工作的:我们给我们的数组一个数字,放一个字符串,函数应该把它写在控制台上。例如,输入:4 火

如何更正代码以使其正常工作?

我认为问题出在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;
}

标签: carrayspointers

解决方案


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;
}

推荐阅读