gpt4 book ai didi

通过 malloc 和 getchar() 创建字符串

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

所以我正在尝试编写一个程序,基本上通过内存分配创建一个字符串,读取每个字符的字符,但仅通过键盘的一个输入。我知道有多种(更好的)方法可以做到这一点,但我想通过这种特殊的方式来做到这一点!这是代码:

int newstring (char** string)
{
printf("--------------In function newstring--------------\n");
int i = 0;
string = malloc ( sizeof (char) );
printf("Adress: %p\n", (void*)string);
if (string == NULL)
return -1;

while ( 1 )
{
printf("Pre-scan\n");
*(string[i]) = getchar();
printf("After-scan\nstring[%d] = %c\n", i, *(string[i]));
i++;
if ( *(string[i-1]) == '\n')
break;
printf("Reallocation to size %d\n", i+1);
string = realloc ( string, sizeof (char) * (i+1) );
if (string == NULL)
return -1;
}

string[i-1] = '\0';
printf("--------------Exit function newstring--------------\n");
return;
}

int main()
{
char *string;
newstring ( &string );
printf("%s\n", string);
}

问题是程序总是在读取第 3 个字符之前中途崩溃,这是发生的 printfs:

Adress: 00AE1578
Pre-scan
1st Input: >>Hello
After-scan
string[0] = H
Reallocation to size 2
Pre-scan
After-scan
string[1] = e
Reallocation to size 3
Pre-scan

我想知道是否是因为缓冲区有某种限制,但我发现很难相信限制是 2 个字符(我尝试了多个输入,总是卡在第 3 个字符之前)。还尝试使用“scanf ("%c", *(string[i]) )”得到相同的结果。

最佳答案

问题由此开始:

string = malloc ( sizeof (char) );

这里的string是指向实际指针的指针。您需要取消引用它:

*string = malloc ( sizeof (char) );

然后问题继续

*(string[i]) = getchar();

你引用错了,应该是

(*string)[i] = getchar();

与您使用错误解引用的其他地方相同。

然后

string[i-1] = '\0';

在这里您根本没有取消引用指针。应该是

(*string)[i-1] = '\0';

最后,getchar函数返回一个 int。当您通过将结果与 EOF 进行比较来检查函数是否失败时,这一点很重要。你根本不这样做。

关于通过 malloc 和 getchar() 创建字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42841966/

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