gpt4 book ai didi

c - 字符串的动态内存分配

转载 作者:太空宇宙 更新时间:2023-11-04 06:31:55 24 4
gpt4 key购买 nike

int ReadNames(char ***Names, int *n)    
{
int i, k;
char name[100];
printf("Enter how many names\n");
scanf("%d", n);
/* Allocate memory and read names */
*Names=(char **)malloc((*n)*sizeof(char *));
for(i=0;i<(*n);i++)
{
*(*Names+i)=(char*)malloc(sizeof(name));
gets(name);
strcpy(*(*Names+i),name);
}

for(i=0;i<(*n);i++)
printf("%s\n",*(*Names+i));
return 1;
}
void main()
{
char **Names;
int n, i;
ReadNames(&Names, &n);
}

该程序运行良好...但与我的预期略有不同。问题是当我将“n”的值输入为 3 时,它只能读取 2 个字符串并打印这两个字符串....即。它读取 n-1 个字符串并打印 n-1 个字符串。我的代码有什么问题。

最佳答案

只需在 scanf() 之后添加 getchar()

以便每个 '\n' 在接受输入时被处理掉。您的代码将是

int ReadNames(char ***Names, int *n)
{
int i, k;
char name[100];
printf("Enter how many names\n");
scanf("%d", n);
getchar(); // eats unnecessary '\n' in the buffer
/* Allocate memory and read names */
*Names=(char **)malloc((*n)*sizeof(char *));
for(i=0;i<(*n);i++)
{
*(*Names+i)=(char*)malloc(sizeof(name));
gets(name);
strcpy(*(*Names+i),name);
}

for(i=0;i<(*n);i++)
printf("%s\n",*(*Names+i));
return 1;
}
void main()
{
char **Names;
int n, i;
ReadNames(&Names, &n);
}

关于c - 字符串的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19650882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com