【发布时间】:2019-10-15 17:20:34
【问题描述】:
我正在编写一个代码,以将来自终端的用户输入作为字符串获取。我在网上读到,在 C 中实例化字符串的正确方法是使用字符数组。我的问题是,如果我实例化一个大小为 [10] 的数组,那是 10 个索引吗? 10 位? 10 个字节?请看下面的代码:
#include <stdio.h>
int main(int argc, char **argv){
char str[10] = "Jessica";
scanf("%s", &str);
printf("%c\n", str[15]);
}
在这个例子中,“str”的大小被初始化为 10,我可以打印出 str[15],假设当用户输入一个字符串时,它会上升到该索引。
我的问题是:
- 从 scanf 取值后,“str”数组的大小是否增加?
- 我的原始数组会溢出多少字符串字符? .
【问题讨论】:
-
您正在使用
printf("%c\n", str[15]);调用 未定义的行为 - 在这种情况下任何事情都可能发生 -
共有 10 个索引,从
0到9。根据定义,字符串是元素值为'\0'(或简称为0)的数组,因此您的数组最多可以包含 9 个字符(0 到 9 个字符 +0元素) -
UB 抬起丑陋脑袋的方法之一就是做你想做的事……除了满月的星期三
-
C 是一种非常有效的工具,但并不安全。就像电锯一样。你没有错误就是因为这个。