在C语言中,字符串实际上是字符数组,所以我们可以使用scanf
函数来读取字符串。但是,需要注意的是,scanf
在读取字符串时会在遇到空格、制表符或换行符时停止。因此,它不能用于读取包含空格的字符串。
以下是使用scanf
读取字符串的基本示例:
char str[100];
scanf("%s", str);
在这个例子中,我们定义了一个可以容纳100个字符的字符数组str
。然后,我们使用scanf
函数和"%s"
格式字符串来读取一个字符串,并将其存储在str
中。
如果你想读取一行文本(包括空格),你可以使用fgets
函数,如下所示:
char str[100];
fgets(str, 100, stdin);
在这个例子中,fgets
函数从标准输入stdin
读取最多99个字符(最后一个字符是\0
,代表字符串的结束)并将它们存储在str
中。
在C语言中,数组名(在这种情况下是 str
)本质上是一个指针,它指向数组的第一个元素。因此,当你写 str
时,你实际上是在提供数组的第一个元素的地址。这就是为什么 scanf
在读取字符串时不需要 &
的原因。
在大多数情况下,当你需要提供变量的地址给函数(如 scanf
)时,你需要使用 &
运算符。这是因为对于基本类型(如 int
,float
等),你需要明确地获取它们的地址。
但是,对于数组,情况就不同了。数组名本身就是一个指向数组第一个元素的指针,因此你不需要使用 &
运算符。这适用于所有类型的数组,包括字符数组(也就是字符串)。
例如,以下两个语句在功能上是等价的:
scanf("%s", str);
scanf("%s", &str[0]);
在这两种情况下,scanf
函数都会将输入的字符串存储在数组 str
的开始位置。