反转输入 - 未定义的输出
reversing input - undefined output
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
int main(){
char zahl[255];
cin>>zahl;
for(int i=255; i>=0; i--)
if(zahl[i] != 0)
cout<<zahl[i];
cout<<endl;
return 0;
}
当我输入一些单词时,输入被颠倒,但在此之前和之后都有未定义的表达式。有人可以解释一下原因吗?据我了解,char 数组由插入的表达式填充(从 [0] 开始),其余部分填充"\0"。根据 if 条件,我跳过了"\0"。未定义的表达式从何而来?
泰问候 CS
最初,数组未初始化并包含垃圾。 cin
写入输入,后跟单个零终止;数组的其余部分仍然包含垃圾,您的循环在输入之前输出这些垃圾。
您可以指定数组初始化为零:
char zahl[255] = {};
或者你可以测量字符串长度,然后从那里开始:
for (int i=std::strlen(zahl)-1; i >= 0; i--)
或者,更好的是,使用标准库来修复潜在的缓冲区溢出:
std::string zahl;
std::cin >> zahl;
std::copy(zahl.rbegin(), zahl.rend(), std::ostream_iterator<char>(std::cout));
假设输入的单词长度为 255 个字符,您的for loop
将运行 256 次。但是,用户输入的长度会有所不同,因此请改为计算长度并在for loop
中使用它。
int len = strlen(zahl);
代码现在将是:
#include <iostream>
#include<string.h>
using std::cout;
using std::cin;
using std::endl;
int main(){
char zahl[255];
cin>>zahl;
int len = strlen(zahl);
for(int i=len-1; i>=0; i--)
if(zahl[i] != 0)
cout<<zahl[i];
cout<<endl;
return 0;
}
相关文章:
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- c++11评估顺序(未定义的行为)
- 使用mysql c++连接器的未定义引用
- 从python调用openMP共享库时,未定义opnMP函数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 具有外部"c"和程序集的未定义函数
- 使用向量(STL)时,未定义的行为,请说明理性背后的以下代码输出
- 未定义的符号:符号引用错误.没有输出写入主
- 反转输入 - 未定义的输出
- 未定义的符号 输出数组 opencv fedora.