- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在学习 C++,但我发现了一个我不理解的行为。如果我用 C 编写以下程序:
#include <stdio.h>
int main() {
char question[] = "What is your name? ";
char answer[2];
printf(question);
scanf("%ls", answer);
printf("%s\n", answer);
return 0;
}
当我输入一个超过两个字节的名字时,答案是一些乱码,但即使我不知道确切原因,我也知道出了点问题并且它试图恢复。
相反,如果我编写这个 C++ 程序(有点等同于前者):
#include <iostream>
using namespace std;
int main() {
char question[] = "What is your name? ";
char answer[2];
cout << question;
cin >> answer;
cout << answer << endl;
return 0;
}
我希望有类似的行为,因为我将 answer
声明为字符数组而不是字符串(可以动态调整其大小)。但是当我输入很长的内容时,它会在我输入时打印回来。一个例子:
$ ./test
What is your name? asdfa
asdfa
$ ./test
What is your name? sdhjklwertiuoxcvbnm
sdhjklwertiuoxcvbnm
那么,这里发生了什么?作为次要问题,当我输入更长的内容时,C 语言会发生什么?
编辑:澄清一下,我知道我可以使用 std::string
而不是 char 数组(我已经在上面写过了 ^^)。我很想知道为什么程序表现出那种行为。现在我知道这是未定义的行为。此外,我更正了 C 程序 (scanf) 中的错误。
最佳答案
char answer[2];
表示您的数组只能包含 2 个字符。如果你压得更多,内存就会溢出,这是未定义的行为。要么在数组中保留足够的空间,要么在不强制使用数组时更好地使用 std::string
。正如其他答案所指出的那样,您正在以错误的方式接受输入。
关于c++ - C和C++的区别 : array size is not honored,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23655767/
有人知道为什么 Safari 不支持我关注的灰色链接颜色吗?适用于 Chrome。 a:link { color:#6495ED; } a:visited { color : gre
我正在尝试使用不引人注目的 JS,在我的 Ruby On Rails 应用程序中使用 JQuery。 用户填写表单后,客户端 JQuery 代码调用: $.post("/premises", ui.f
我正在学习 C++,但我发现了一个我不理解的行为。如果我用 C 编写以下程序: #include int main() { char question[] = "What is your n
我有一个标准的 gradle java 项目,我使用的是 lombok。我类有一个 @NoArgsConstructor(access = AccessLevel.PACKAGE) 但是当我运行 ./
假设我有一个类(class),学生可以通过成员(member)资格注册(例如类(class)和学生的 has_and_belongs_to_many 关系)。一些成员(member)资格适用于只是观察
我正在尝试使用以下代码在“内部存储器”中创建一个文件夹和子文件夹,即“CJI/Export”。为了确保命令成功执行,我在所有状态下都添加了Toast Messages。 我尝试在两个设备上运行代码:“
我正在尝试使用 Cartography 为 UILabel 设置动画并使用此代码: let group = ConstraintGroup() constrain(alertLabel
Firefox 缓存 10 秒 1.5MB 的视频,但不缓存 50 秒 8.5MB 的视频。我假设它是因为文件大小,但我不确定。什么情况下 firefox 会接受缓存请求? 我正在使用此代码强制缓存
GCC sanitizer在 64 位系统上创建 huge core files约 17TB。 如果您想要一个用于死后分析的核心,您需要将以下选项传递给 sanitizer: unmap_shadow
我使用以下查询来创建我的表。 create table t1 (url varchar(250) unique); 然后我插入了大约 500 个网址,两次。我期待第二次我的表中没有显示新条目的 URL
假设我的提交间隔是 1000。 在编写过程中,我在第 990 条记录处收到错误,根据跳过策略可以跳过该错误。 因此会发生回滚,并且作者将再次开始从记录 1 开始写入相同的记录。 但是,这一次,它正在提
我有两个线程:一个提供更新,一个将更新写入磁盘。只有最近的更新很重要,所以我不需要 PC 队列。 简而言之: feeder 线程将最新更新放入缓冲区,然后设置标志以指示新更新。 写入线程检查标志,如果
在从源代码安装 GitLab 时,我在运行诸如 rake 之类的二进制文件时遇到问题。我自己的 Ruby 或 Rails 项目从未见过类似的问题: # bundle config Set for yo
我创建了一个 layered window通过添加 WS_EX_LAYERED扩展风格: wndClass.ExStyle = wndClass.ExStyle | WS_EX_LAYERED; Wi
我有一个 python 项目“myproject”,其中包含多个包。其中一个包“myproject.settings”包含一个模块“myproject.settings.local”,该模块通过“sv
假设 bash 配置了以下别名: alias up="git --git-dir /path/to/backup/.git" 那个特定的存储库 - 并且只有那个存储库 - 具有以下 git 别名: [
我正在为 java 编辑器创建一个保存后操作 this guide 。到目前为止,我的清理代码如下所示: public class CheckFileCleanUp implements IClean
每当我尝试通过 Intent 打开相机/图库时,我的 Honor 4C 手机、Android 6.0 版和 64 位八核 CPU 都会出现此错误。 load: so=/system/lib64/lib
我是一名优秀的程序员,十分优秀!