c - C中的字符数组和字符串终止字符
问题描述
我知道在 C 中,\0
终止字符串。我们可以将字符串和字符数组都分配给字符数组吗?
char c1[] = "hello";
char c2[] = {'h','e','l','l','o'};
但是,我意识到字符数组没有\0
终止字符:
printf("%d\n",sizeof(c1)); //6
printf("%d\n",sizeof(c2)); //5
但是,当我打印它们时,我会看到如下内容:
printf("%s\n",c1); //hello
printf("%s\n",c2); //helloV
Q1。如果我重新运行它,第二行有时会打印helloU
,有时会打印helloV
。为什么会这样?
Q2。另外,字符数组可以包含\0
终止字符串以及没有\0
终止字符数组如何?
Q3。我知道printf
遇到\0
. printf
不遇到时表现如何\0
?
解决方案
c2
不是字符串,因此将其传递给printf
%s
具有未定义的行为。未定义的行为是未定义的。从技术上讲,它不需要打印任何东西。它还可以删除您的所有文件或进入无限循环或...- 并非所有字符数组都是字符串。只要您不将它传递给需要字符串的函数,您就可以在字符数组中存储您想要的任何内容。
- 它具有未定义的行为。
推荐阅读
- xslt - 如何在 xslt 中对 value-of 进行排序?
- git - GIT 将更改从 Master 推送到所有其他分支 Devops /Visual Studio
- php - Laravel 模型继承:如何从父级实例化正确类型的模型
- excel - 从 excel 中的谷歌搜索返回一个数字
- java - 在Java中处理criteriaBuilder的“in”子句中的空列表
- git - 如何推送审核?
- python - 关于从文件中读取数据和将数据写入文件
- docker - 如何创建自定义 Docker 映像并将其用作 GitLab CI/CD 服务?
- gremlin - 尝试使用`with`在gremlin查询上设置唯一请求ID时的空指针
- mysql - MySQL Join 元表(WordPress 样式表结构)