arrays - C - 写入和读取动态数组
问题描述
我正在尝试创建一个用于存储名称的二维数组(每个最多 50 个字符)。我写了一个代码,但它不能正常工作,问题出在哪里?(我可以用静态数组来做到这一点,但是一开始我的程序不知道我想在数组中存储多少个名字)。这是我的代码:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n=5;
int size=51;
char *a_name=(char*)malloc(n*size*sizeof(char));
for(int i=0;i<n;i++){
scanf("%s",&a_name[i]);
}
for(int i=0;i<=n;i++){
printf("%s\n",a_name[i]);
}
return 0;
}
解决方案
你需要的不是一个数组,char
而是一个char *
. 尝试这个:
int n = 5, size = 51;
char **name_array = (char **)malloc(sizeof(char *) * n);
for (int i = 0; i < n; ++i) {
name_array[i] = (char *)malloc(sizeof(char) * size);
// You may initialize the array first.
scanf("%s\n", name_array[i]);
}
当您不再需要这些名称时,请记住释放内存。
推荐阅读
- javascript - 问题使用ajax实现无限滚动
- c++ - 使用索引设置向量元素时的奇怪行为
- css - 在绝对定位元素中选择文本
- python - 在 Flask 应用程序中为 create_all() 导入模型时的循环依赖
- php - 信息未存储在会话 cookie 中
- google-apps-script - 宏运行后不点击就无法编辑字段
- haskell - 在 Haskell 的另一个 Functor 中映射 Functor
- php - 如何使用单选按钮插入多个答案?
- ansible - 有没有办法将 github3.py 包含为 Ansible Playbook 库或模块,而无需通过 pip 安装?
- python - ldap3 在 docker 容器中使用时“无法打开套接字”