当我在Hackerrank中练习字符串时,他们向我展示了一种在C中获得字符串输入的新方法,这是我以前从未见过的。这是代码:
char *s;
s = malloc(1024 * sizeof(char));
scanf("%[^n]", s);
s = realloc(s, strlen(s) + 1);
你能解释一下这些东西是怎么工作的吗?在很多程序中,我总是通过以下方式输入字符串:
char *s[MAX_LEN];
fflush(stdin);
gets(s);
谢谢!
scanf("%[^n]", s);
比gets()
读取行更差。
它不提供导致缓冲区溢出的宽度限制,当输入为"n"
时无法设置s
,并且不消耗后面的"n"
。
使用fgets()
将用户输入的行读取到字符串中。
要删除潜在的尾随'n'
,请参阅此处。
fgets(buf, n, stdin)
最多可读取行中的n-1
个字符。消耗多余输入所需的附加代码。