C++编译 strlen 和 strcpy 的问题
C++ compile problem with strlen and strcpy
#include<iostream>
using namespace std;
int main()
{
char a[5],b[5];
cout<<strlen(a)<<endl;
strcpy(a,b);
}
当我使用g++ filename.cpp
编译代码时,代码将被编译没有问题,但是当我的朋友尝试使用 dev-c++ 执行此操作时,他们会收到错误!
基于 cplusplus.com,我是应该出错的人!!
所以我只是想知道是什么导致了这里的差异?
PS:我已经尝试了不同版本的C++使用-std=c++98
投掷-std=c++2a
strlen
和strcpy
在<cstring>
标头中声明。 一些标准库实现可能包含在<iostream>
中,有些可能没有。 这就解释了为什么它可以使用某些设置而不是其他设置进行编译。
char a[5],b[5];
cout<<strlen(a)<<endl;
strcpy(a,b);
a
和b
都是未初始化的。程序具有未定义的行为。编译器没有义务生成任何特定内容。任何行为都是可以接受的。不能使用 UB 对代码进行推理。该程序只是无效/损坏(编译器也没有义务警告您有关UB btw的信息(。
至于编译失败:您没有包含定义strcpy
和strlen
的标头。那是在<cstring>
.包括该标头,代码应该编译(它仍然会被破坏,但它应该编译(。
标准库标头(如iostream
(允许包含其他标头,但不是必需的。因此,在某些系统上,您可能可以不包含标头,因为其他一些系统会为您拉入标头。但这并不能保证,你不应该依赖它。始终明确包含您需要/使用的内容的标题。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 使用strcpy将char数组的元素复制到另一个数组
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- C++编译 strlen 和 strcpy 的问题
- 与 strcpy 和 strcat 的问题
- 这个带有指针函数的 strcpy 有什么问题?