c - C - 动态内存分配的二维字符串数组
问题描述
我最近遇到了一个问题,我试图将内存重新分配给二维字符数组,但它似乎不起作用。在这里,我试图通过将原因数量和 char 数组(字符串)的大小相乘来将原因数量重新分配给数组原因,但它不起作用,二维数组原因仍然有 1 个单元格。提前致谢!
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define STR_LEN 50
typedef struct list
{
char** reasons;
int numReasons;
}list;
void printReasons(list* pCons, list* pPros,int conNum,int proNum);
int main(void)
{
list proList = { 0, 1 };
list conList = { 0, 1 };
char dillema[STR_LEN] = { 0 };
char stringHelper[STR_LEN] = { 0 };
int flag = 1, choice = 0;
conList.reasons = (char**)malloc(sizeof(char*));
proList.reasons = (char**)malloc(sizeof(char*));
printf("What is your dillema?\n");
fgets(dillema, STR_LEN,stdin);
do
{
printf("Choose option:\n1 - Add PRO reason\n2 - Add CON reason\n3 - print reasons\n4 - Exit\n");
scanf("%d", &choice);
getchar();
switch (choice)
{
case 1:
printf("Enter a reason to add to a list PRO:");
fgets(stringHelper, STR_LEN, stdin);
stringHelper[strlen(stringHelper) - 1] = 0;
proList.reasons = (char**)realloc(proList.reasons,sizeof(char*) * proList.numReasons);
proList.reasons[proList.numReasons - 1] = (char*)malloc(sizeof(char) * strlen(stringHelper));
strcpy(proList.reasons[proList.numReasons - 1], stringHelper);
proList.numReasons++;
break;
case 2:
printf("Enter a reason to add to a list CON:");
fgets(stringHelper, STR_LEN, stdin);
stringHelper[strlen(stringHelper) - 1] = 0;
conList.reasons = (char**)realloc(conList.reasons,sizeof(char**) * conList.numReasons);
conList.reasons[conList.numReasons - 1] = (char*)malloc(sizeof(char) * strlen(stringHelper));
strcpy(conList.reasons[conList.numReasons - 1], stringHelper);
conList.numReasons++;
break;
case 3:
printReasons(&conList, &proList,conList.numReasons,proList.numReasons);
break;
case 4:
flag = 0;
break;
default:
printf("choice is not valid,choose again:\n");
}
} while (flag);
getchar();
return 0;
}
void printReasons(list* pCons, list* pPros, int conNum, int proNum)
{
int i = 0;
for (i = 0; i < conNum; i++)
{
printf("%s\n",pCons->reasons[i]);
}
for (i = 0; i < proNum; i++)
{
printf("%s\n", pPros->reasons[i]);
}
}
解决方案
推荐阅读
- c# - 如何在数据库操作正在进行时更新我的 XAML,然后在完成后再次更新它?
- c++ - c++ argmax of function(vector)
- r - 条形图的大小和百分比不匹配
- twitter-bootstrap - 使用 kendo-ui 输入的引导列定义不正确
- azure-devops - 使用 WIQL 获取工作项的所有子项
- python - 如何在不使用 return 的情况下从一个函数中获取信息以在 python 中的另一个函数中使用?
- java - Java跳过打印语句扫描器,具体
- javascript - 如何以编程方式隐藏 chrome 中的密码建议列表?
- angular6 - Angular 6 中 foreach 循环中的 HTTP POST 请求跳过第一项
- java - java.security.NoSuchProviderException:没有这样的提供者:nCipherKM