有更安全和更稳健的方式做你正在尝试做的,但我认为这是一个学习的经验,尝试这样的:使用scanf("%s", str);
只会之前的空间拿起字符
#include <stdio.h>
# define MAX_CHARS 100
int main(void)
{
char str[MAX_CHARS];
int i; /* i should be an integer */
printf("Enter a string (less than %d characters) : ", MAX_CHARS);
/* scanf("%s", str); */ /* do not use &str, str is already a pointer */
fgets(str, MAX_CHARS - 1, stdin);
for (i = 0; (i < MAX_CHARS) && (str[i] != '\0'); ++i) ;
printf("Length of string: %d\n", i);
return 0;
}
, 所以如果你的字符串是hello world
然后str的内容只会hello
。
如果使用scanf,那么如果您输入的值超过MAX_CHARS,或者您的情况为100个字符,则会出现溢出错误。使用fgets
更安全,但将包含\n
字符str。
通常你打的enter
关键信号是输入, 但是你可以打控制d已到文件末尾结束,这将与fgets
工作,海峡的内容不会有\n
字符在最后。在我的系统中,我必须按两次ctrl-d。
来源
2016-11-22 18:45:06
ron
什么是'scanf_s()'?它不在手册页中。 – Blacksilver
'scanf_s(“%s”,&str);'应该是'scanf_s(“%s”,str);'。即放下'&' –
@Blacksilver:它是标准的一部分,尽管是可选的。 – Olaf