簡體   English   中英

動態數組和掃描字符串的 ANSI C 問題

[英]ANSI C problem with dynamic array and scan string

我在 ANSI 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;
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM