gpt4 book ai didi

根据用户输入创建可变数量的字符串变量(C语言)

转载 作者:行者123 更新时间:2023-11-30 21:37:03 25 4
gpt4 key购买 nike

我想创建一个字符串变量数组,元素的数量取决于用户的输入。例如,如果用户输入的是3,那么他可以输入3个字符串。比如说“aaa”、“bbb”和“ccc”。它们由相同的 char(*ptr) 指针存储,但索引不同。

代码:

int main()
{
int t;
scanf("%d", &t);
getchar();
char *ptr = malloc(t*sizeof(char));
int i;

for(i=0;i<t;i++)
{
gets(*(ptr[i]));
}
for(i=0;i<t;i++)
{
puts(*(ptr[i]));
}

return 0;
}

t 是元素的数量,*ptr 是指向数组的指针。我想将“aaa”、“bbb”和“ccc”存储在ptr[0]、ptr[1]和ptr[2]中。但是,在 gets 和 put 语句中发现了错误,我无法找到解决方案。有人会帮助我吗?谢谢!

最佳答案

  • 您不应使用 gets(),它存在不可避免的缓冲区溢出风险,在 C99 中已弃用并已从 C11 中删除。
  • char 中只能存储一个字符。如果输入的字符串的最大长度是固定的,则可以分配一个数组,其元素为char数组。否则,您应该使用 char* 数组。

试试这个(这是针对前一种情况):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* the maximum length of strings to be read */
#define STRING_MAX 8

int main(void)
{
int t;
if (scanf("%d", &t) != 1)
{
fputs("read t error\n", stderr);
return 1;
}
getchar();
/* +2 for newline and terminating null-character */
char (*ptr)[STRING_MAX + 2] = malloc(t*sizeof(char[STRING_MAX + 2]));
if (ptr == NULL)
{
perror("malloc");
return 1;
}
int i;

for(i=0;i<t;i++)
{
if (fgets(ptr[i], sizeof(ptr[i]), stdin) == NULL)
{
fprintf(stderr, "read ptr[%d] error\n", i);
return 1;
}
/* remove newline character */
char *lf;
if ((lf = strchr(ptr[i], '\n')) != NULL) *lf = '\0';
}
for(i=0;i<t;i++)
{
puts(ptr[i]);
}

free(ptr);
return 0;
}

关于根据用户输入创建可变数量的字符串变量(C语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38682123/

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