gpt4 book ai didi

c - 存储用户输入而不声明任意大的数组。

转载 作者:行者123 更新时间:2023-11-30 17:33:36 24 4
gpt4 key购买 nike

我正在接受字符输入并存储它,而没有声明任意大的数组。问题是代码不会打印存储的值(尽管它完美地打印了我输入的元素数量)。工作原理是:在第一个 for 循环执行中,创建“b”并将“c”复制到其中(c 现在包含任意内容),然后用户覆盖“b”中的任何内容,然后更新的“b”是复制到“c”。在第二个及后续循环执行中,“c”基本上是旧的“b”,并且通过将“c”复制到其中并在末尾输入新元素来不断更新“b”。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char e = 'a';
char *b,*c = &e;
printf("start entering the characters and enter Z to terminate:\n");
char d;
int i,m;
for(i=0;(d=getchar()) != 'Z';i++)
{
b=malloc(sizeof(char)*(i+1));
strcpy(b,c);
scanf("%c",b+i);
c=malloc(sizeof(char)*(i+1));
strcpy(c,b);
}
printf("-----------------------------------------------------------------\n");
int q=strlen(b);
printf("%d\n",q);
//printf("%s\n",b);
for(m=0;m<q;m++)
printf("%c",b[m]);
return 0;
}

最佳答案

我不确定为什么问题代码同时使用“getchar()”和“scanf()”;也许我错过了什么?

而且,正如“BLUEPIXY”提到的,realloc() 更好。

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

int main()
{
char *b = NULL; /* This will be the reference to the self-growing array. */
size_t bLen = 0; /* This is the length of the string in 'b' (not counting the string termination character.) */

for(;;)
{
char *x; /* Used to safely grow the array 'b' larger. */
int d; /* Use an 'int'. 'getchar()' returns an 'int', (not a 'char'). */

/* Get a character from stdin. */
d=getchar();
if('Z' == d)
break;

/* Safely grow the array 'b' large enough to hold the one more character. */
x=realloc(b, (bLen+1) * sizeof(*b));
if(NULL == x)
{
fprintf(stderr, "realloc() failed.\n");
exit(1);
}
b=x;

/* Store the character in the array and re-terminate the string. */
b[bLen++] = d;
b[bLen] = '\0';
}

printf("-----------------------------------------------------------------\n");
printf("%s\n",b);

if(b)
free(b);

return 0;
}

关于c - 存储用户输入而不声明任意大的数组。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23713844/

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