c - 如何仅从 C 中的 scanf 复制前 n 个字符

标签 c string

<分区>

抱歉,我确定如何正确表达我的问题。

我正在做一项作业,我想为错误检查添加一个功能。 我有一个 scanf 要求一个词(最多只有 5 个字符)。 如果用户输入一个长度为 6 个字符的字符串,如 candle,它只会复制 candl

这是我的看法。尽管我确信这不是最有效的方法。

printf("\n\tEnter word: ");
scanf("%s", input);
if (strlen(input) > MAX_LETTERS){
    int i = 0;
    while (i < MAX_LETTERS){
        word[i] = input[i];
        i++;
    }
    printf("the word is %s", word);
}

基本上检查输入是否大于允许的最大字母数。然后如果是,它循环然后只复制最大数量的字母。任何帮助将不胜感激。提前致谢!

最佳答案

scanf("%ns", input);

其中 n= 要读取的字符数。如果您的情况是 5,则有

scanf("%5s", input);

要使用 scanf() 避免缓冲区溢出,您可以指定要读取的字符数,如上所示。假设这就是您想要的。

我总是建议在读取字符串时使用 fgets()

fgets(input,sizeof(input),stdin);

您可以在第二个参数中指定您想要的字符数。

PS: fgets()自带一个换行符

关于c - 如何仅从 C 中的 scanf 复制前 n 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28600772/

相关文章:

c - 从 C 中的文件读取时忽略\n?

java - undefined symbol 错误

c - 如何在特定位置写入文件?

c++ - 我如何使用 GCC 选项 -iprefix 和 -iwithprefix?

python - 从 python 3 中的字符串中删除 unicode 表示的最简单方法?

java - 有没有一种方法可以切换字符串中的字母?

c - 如何使用c中的pcap执行附近可用的wifi ap的扫描

python - 删除最后一个正斜杠之前的部分字符串

Java String.matches ("regex")

java - 如何将字符串的多个部分放入列表中?