gpt4 book ai didi

c - C 中的字符串减速长度

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

所以我正在编写一个小程序(我是 C 的新手,来自 C++),我想接收一个最大长度为 10 的字符串。

我将一个字符数组声明为

#define SYMBOL_MAX_LEN 10 //Maximum length a symbol can be from the user (NOT including null character)
.
.
.
char symbol[SYMBOL_MAX_LEN + 1]; //Holds the symbol given by the user (+1 for null character)

那为什么我用的时候会这样:

scanf("%s", symbol); //Take in a symbol given by the user as a string

我可以输入“01234567890”,程序仍会存储整个值吗?

我的问题是:

  1. scanf 不会阻止值被记录在相邻的符号之后的内存块?
  2. 如何防止用户输入大于长度 SYMBOL_MAX_LEN 的值?
  3. scanf 是自动将空终止字符放入 symbol 中,还是需要我手动执行?

最佳答案

您可以限制 scanf() 读取的字符数:

#include <stdio.h>

int main(void) {
char buffer[4];
scanf("%3s", buffer);
printf("%s\n", buffer);
return 0;
}

示例输出:

paul@local:~/src/c/scratch$ ./scanftest
abc
abc
paul@local:~/src/c/scratch$ ./scanftest
abcdefghijlkmnop
abc
paul@local:~/src/c/scratch$

scanf() 将为您添加终止符 '\0'

如果您不想在格式字符串中硬编码长度,您可以动态构造它,例如:

#include <stdio.h>

#define SYMBOL_MAX_LEN 4

int main(void) {
char buffer[SYMBOL_MAX_LEN];
char fstring[100];
sprintf(fstring, "%%%ds", SYMBOL_MAX_LEN - 1);
scanf(fstring, buffer);
printf("%s\n", buffer);
return 0;
}

为免生疑问,scanf() 通常是处理输入的糟糕函数。 fgets() 对这类事情要好得多。

关于c - C 中的字符串减速长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19479053/

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