C++ 输出不是我键入的内容。它是-->;(畳;慨;汩;朠;灵;慴;찀;ೌ;ೌ;ೌ;&# #包括 #包括 #包括 使用名称空间std; int main(){ charx[20]; cout

C++ 输出不是我键入的内容。它是-->;(畳;慨;汩;朠;灵;慴;찀;ೌ;ೌ;ೌ;&# #包括 #包括 #包括 使用名称空间std; int main(){ charx[20]; cout,c++,visual-c++,io,C++,Visual C++,Io,您的程序涉及未定义的行为。x数组未完全初始化,您从未初始化的索引中读取。此外,您总是写入20个字节,与您从用户读取的内容无关 我猜您使用了一些文本编辑器,比如记事本。在尝试猜测编码时使用了记事本。它似乎猜测文件是UTF16,并显示20/2==10字符 要解决此问题,请准确地将用户输入的字符数存储到文件中。使用std::string可简化此操作 编辑:C++方式: #include <iostream> #include <string> #include <fst

您的程序涉及未定义的行为。
x
数组未完全初始化,您从未初始化的索引中读取。此外,您总是写入20个字节,与您从用户读取的内容无关

我猜您使用了一些文本编辑器,比如记事本。在尝试猜测编码时使用了记事本。它似乎猜测文件是UTF16,并显示
20/2==10
字符

要解决此问题,请准确地将用户输入的字符数存储到文件中。使用
std::string
可简化此操作

编辑:C++方式:

#include <iostream>
#include <string> 
#include <fstream>
using namespace std;
int main() {
char x[20];
cout << "enter something\n";
cin.getline(x,20);
ofstream o("d:/tester.txt");
//o.write( (char*)&x , sizeof(x) );
for(int i = 0 ; i<=19 ; i++ ) {
 o.put(x[i]);
}
}
#包括
#包括
#包括
使用名称空间std;
int main(){
字符串x;

cout您的程序涉及未定义的行为。
x
数组未完全初始化,您从未初始化的索引中读取。此外,您总是写入20个字节,与您从用户读取的内容无关

我猜您使用了一些文本编辑器,比如记事本。在尝试猜测编码时使用了记事本。它似乎猜测文件是UTF16,并显示
20/2==10
字符

要解决此问题,请准确地将用户输入的字符数存储到文件中。使用
std::string
可简化此操作

编辑:C++方式:

#include <iostream>
#include <string> 
#include <fstream>
using namespace std;
int main() {
char x[20];
cout << "enter something\n";
cin.getline(x,20);
ofstream o("d:/tester.txt");
//o.write( (char*)&x , sizeof(x) );
for(int i = 0 ; i<=19 ; i++ ) {
 o.put(x[i]);
}
}
#包括
#包括
#包括
使用名称空间std;
int main(){
字符串x;

cout-ahem,我是否再次看到字符数组;)Suhail,编码基本上是由输出机制选择的。您需要缩小范围,以确定这是显示问题还是文件中存储的实际字节中的错误。参见post-ahem,我是否再次看到字符数组;)Suhail,编码基本上是由输出机制选择的。您需要缩小范围这是一个显示问题,或者是文件中存储的实际字节中的错误。请看帖子我无法做到这一点。您能帮我吗?@ybungalobill:What?
getline
附加了一个空哨兵,最多可以写入20个字节。您说得对,他可能不应该全部写入20个字节。@ybungalobill:在我看来,您的第一个段落是胡说八道。这里没有UB。使用未初始化的指针是UB,但从
char
(其中一些元素尚未初始化)数组读取垃圾不是。@Suhail:你不能做什么?为什么?@Tomalak:C++03 4.1左值到右值转换:如果左值引用的对象不是T类型的对象,也不是从T派生的类型的对象,或者如果对象未初始化,则需要此转换的程序具有未定义的行为。"我不能这样做。你能帮我吗?@ybungalobill:What?
getline
附加了一个空哨兵,最多可以写20个字节。你说得对,他可能不应该写所有的20个字节。@ybungalobill:在我看来,你的第一段是胡说八道。这里没有UB。使用未初始化的指针是UB,但是读gar
char
(其中一些元素尚未初始化)数组中的bage不是。@Suhail:你不能做什么?为什么?@Tomalak:C++03 4.1左值到右值转换:如果左值引用的对象不是T类型的对象,也不是从T派生的类型的对象,或者如果对象未初始化,则需要此转换的程序具有未定义的行为