gpt4 book ai didi

C字符串使用指针

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

所以,我想使用字符串指针数组从用户那里获得 5 个字符串输入。但是,我希望这些字符串有空格,因此,我使用 %[^\n]s 接受字符串直到出现换行符。但是,这段代码不起作用:/有人可以解释为什么吗??

P.S-> 如果您在 scanf 中使用 %s,则代码有效。但是我强制性地想要空格。所以,请提出一些建议。

提前致谢!

#include<stdio.h>
#include<malloc.h>

void main()
{
char *f[5];
int i;
printf("\nEnter 5 strings:\n");
for(i=0;i<5;i++)
f[i]=malloc(20);
for(i=0;i<5;i++)
scanf("%[^\n]s",f[i]);
printf("The 5 strings are:\n");
for(i=0;i<5;i++)
{
printf("\n%s",f[i]);
}
}

最佳答案

一个主要问题是尾随 's'在你的格式。如果您阅读例如this reference你会看到 "%["格式由 ']' 终止特点。当你有额外的 's'在格式中,scanf将等到它匹配文字 's'在输入中。

要跳过结尾的换行符,您可以在格式和 scanf 中添加前导空格将自动读取并跳过您在下一次循环迭代中不需要的所有空格(包括换行符)。

您还应该限制输入的长度 scanf阅读,或者你可能有 scanf读的比你分配的多。限制应为 19 个字符(字符串终止符为 20,就像您分配的那样)。

所以正确的格式应该是" %19[^\n]" .


作为旁注,既然你平等地分配了所有的字符串,为什么不简单地有一个数组数组呢?喜欢

char f[5][20];

如果您仍然决定使用指针,请不要忘记 free他们在你完成后。在您的程序这样简单的情况下您并不需要它,但最好早点养成良好的习惯。

关于C字符串使用指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25711432/

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