c - 动态数组和扫描字符串的 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;
}
解决方案
#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;
}
推荐阅读
- r - 在 R-studio 中,如何使用相同的 [i] 重复 for 循环,直到满足特定条件?
- php - 我需要从函数返回多个值并将它们打印在 Wordpress 的模板中
- angular-cli - 运行 'ng e2e' 不会向控制台输出任何内容
- ruby - 无法在我的 Ruby 代码中将数组强制转换为 Float (TypeError)
- java - 没有 RestTemplate 的休息电话
- node.js - 需要更新 mongodb 中数组中的元素
- javascript - 是否有用于在浏览器中滚动的特殊线程?
- c++ - 实现简单的逻辑和延迟模拟器
- node.js - 在节点中将midi转换为mp3
- node.js - 使用 jwt 在 .net core 2.1 中构建网站(在 node.js 中)和 API。如何连接它们?