字符串输出乱码:烫烫烫烫.....
这是你定义的字符串没有初始化为0,当输出的时候编译器找到不到字符串结束符。就会出现这样的乱码。你可以将你的结构体中定义的字符数组都初始化为0.或者直接用memset()把结构体定义的变量初始化为0试一下。你的程序没有具体看,不过应该就是这个问题吧~
我想你可能是用了字符串,但是用printf的时候格式错误,解读的时候它就把要输出的东西解读成“烫”了...
没有把代码发上来,我也不能确定哪里出错了,只能帮到这
自己再检查检查,有些编译器不会报错的问题
:项数最少函数种类最少,分母中不含三角函
这是我在vc2005发现的,vc2008就没有这个动作,其他编译器没试过(看你用void main想必你用的是vc6吧,那么估计vc6也会这样,但奉劝一句,学C/C++最好别用vc6,因为它不完善的地方会使你助长一些不易改变的坏习惯)。
比如:
int main()
{
char buf[12]; // 未初始化
cout << buf; // 很多“烫烫烫烫...”
}
解决方法很简单啊,数组弄大点,但这样不能从根本上解决问题,因为文本的大小你事先不知道,所以如果文本字节数大出数组大小很多的话,甚至会出错,比如:
char buf[2];
cin >> buf; // 尽量输入多一点试试?
所以最好用string类,有那么方便安全的东西为什么不用呢?而且不用一个字符一个字符地读,像你那样,一个字符调用一次函数,效率太低了,用string类的话,稍微改一下就好了:
#include<iostream>
#include<fstream>
#include <string>
using namespace std;
void main()
{
string line;
string str;
//int i=0,j=0,k=0;
int j=0;
ifstream in("test1.txt");
if(!in)
{
cout<<"文件打开失败"<<endl;
return; // 打开失败就直接结束了
}
while(getline(in, line)) // 一次读取一行
str += line;
in.close();
cout<<str;
system("pause");
}
补充:产生那样的效果的原因,我上面已经解释过了,cout在输出char*类型,在遇到空字符'\0'之前,是会一直输出字符串的内容的。
你之所以数组定义得够大也会出现输出垃圾的原因,还是因为你每次只读一个字符,而且你while循环的逻辑也不大对:
while(in)
{
in.get(CH); // 如果读的是最后一个字符
if(in)str[j++]=CH; // in现在是eof了,最后一个读不进去
}
所以应该改为如下所示,并且加上'\0':
while(in)
{
in.get(CH);
str[j++]=CH;
}
str[j] = '\0';
再不懂的话,模拟你读取文件的动作:
char a[6];
a[0] = '1';
a[1] = '2';
cout << a; // a[2~5]是垃圾,注意
和
char a[6];
a[0] = '1';
a[1] = '2';
a[2] = '\0';
cout << a;
哪个a可以正确地被输出呢?
C语言 字符串的输出,为什么输出那么多‘烫’呢?
输出"烫烫烫烫"是因为vc会自动把未用函数的局部变量空间按字节全部初始化为CC。而定义的字符数组空间不够,所以就占用了那部分不属于自己的空间,因为cout输出char*是要遇到空字符才停止的,所以便把那些垃圾都打出来了。即是说在最后没有字符串结束标志'\\0'。
程序猿关于烫烫烫烫烫烫烫的梗是什么意思,能不能给小白解释一下?_百 ...
著名乱码。可以用来瞬间证明自己是程序员的三个字。源于一些编译器会把C语言中未初始化的栈内存自动赋值为0xcc,以字符串输出后,便会显示成烫烫烫,类似的还有屯屯屯,锟斤拷,锘锘锘。乱码处理:1、保存HTML文件时,文件的编码方式一定要和HTML页面标签中的编码方式一致,否则将会出现乱码。2、当页面...
c++字符串部分总是出现烫烫
如果非要用你的代码的话,那就是在字符数组复制时,是要设一个变量让它从0开始到9或者10变化,逐一复制每个字符:for(int i=0; i<=9; i++) brand[i]=b[i]; for(int j=0; j<=10; j++) type[j]=t[j];
C语言,字符串输出是乱码是怎么回事?
这是C语言习惯,务必养成!\\x0d\\x0a'\\0'是字符串结束符,每当解释器看到这'\\0'才会认为字符串终止,而你的程序明显没有字符串结束符,所以连同垃圾内存一起读出来了。“烫烫。。”等就是垃圾内存。\\x0d\\x0a不明白欢迎追问
字符串输出乱码:烫烫烫烫...
输出"烫烫烫烫"是因为vc会自动把未用函数的局部变量空间按字节全部初始化为CC。而你定义的字符数组空间不够,所以就占用了那部分不属于你的空间,因为cout输出char*是要遇到空字符才停止的,所以便把那些垃圾都打出来了。这是我在vc2005发现的,vc2008就没有这个动作,其他编译器没试过(看你用void main想必你用的...
C语言写文件的时候出现乱码“烫烫烫烫烫烫烫烫”是怎么回事
这是你定义的字符串没有初始化为0,当输出的时候编译器找到不到字符串结束符。就会出现这样的乱码。你可以将你的结构体中定义的字符数组都初始化为0.或者直接用memset()把结构体定义的变量初始化为0试一下。你的程序没有具体看,不过应该就是这个问题吧~...
出现乱码时为什么经常是“烫”和“屯”
0xcc,当字符串看,即0xcccc就是 烫烫烫烫……;把未初始化的堆内存全部填成 0xcd,当字符串看,即0xcccc就是 屯屯屯屯……;可以让我们方便地看出那些内存没初始化;但是 Release 模式下不会有这种附加动作,原来那块内存里是什么就是什么;\/\/\/Over......
C语言,输入一个字符串反向输出,为什么会这样?
定义的字符串数组长度为20,而且并没有赋初始值。输入的字符串长度小,后面未赋值的部分就输出乱码了,一般就是“烫”。解决方法:方法一:在字符串数组的最后添加空字符,表示字符串的结束。方法二:给字符串数组赋初始值,全部赋为空字符'\\0'。方法一代码:include <stdio.h>#include <string....
C语言中字符数组输出“烫烫烫烫烫烫烫”,如何解决
在字符数组最后加上 '\\0',作为字符串结束标志。strcpy(studname[k],ntemp);bai strcpy(studname[i],studname[k]);strcpy(ntemp,studname[i]);strcpy(ntemp,studname[k]);strcpy(studname[k],studname[i]);strcpy(studname[i],ntemp);...
为什么C++程序执行中会出现:’烫烫烫‘
是因为你字符串输出的时候,指针读取超过了本字符数组的结束 而不到下一个字符串的开始,指针指向就是这两个中间的位置 这些内存char值一般在VC里会是205,而两个字节的205连在一起,正好是汉字“烫”的代码
路纪倍欣: 溢出了溢出了.输出"烫烫烫烫"是因为vc会自动把未用函数的局部变量空间按字节全部初始化为CC.而你定义的字符数组空间不够,所以就占用了那部分不属于你的空间,因为cout输出char*是要遇到空字符才停止的,所以便把那些垃圾都打...
沅江市13878858314: C语言中输出烫怎么改 - ?
路纪倍欣: 一般在输出字符串的时候,如果规定了字符串数组的长度,又没有注意字符串的长度,就会出现乱码,一般来说就是出现烫.这个是由于你的程序代码错误造成的.解决方案:完善程序代码,修正错误,明确字符串的长度.
沅江市13878858314: C语言中字符数组输出“烫烫烫烫烫烫烫”,如何解决 - ?
路纪倍欣: 在字符数组最后加上 '\0',作为字符串结束标志. strcpy(studname[k],ntemp); bai strcpy(studname[i],studname[k]); strcpy(ntemp,studname[i]); strcpy(ntemp,studname[k]); strcpy(studname[k],studname[i]); strcpy(studname[i],ntemp); 扩展资料: ...
沅江市13878858314: 字符串问题,输出总是带烫烫烫,怎么改进呢? - ?
路纪倍欣: #include #define maxsize 100 struct string{ char s[maxsize]; }; void init(struct string *l){ int i; for(i=0;i l->s[i]='\0'; } void main(){ struct string l; int i,j=0; init(&l); for(i=0;i scanf(" %c",&l.s[i]); while(l.s[j]!='\0') printf("%c",l.s[j++]); }
沅江市13878858314: 烫烫烫烫烫烫烫 是怎么回事 - ?
路纪倍欣: 这是你定义的字符串没有初始化为0,当输出的时候编译器找到不到字符串结束符.就会出现这样的乱码.你可以将你的结构体中定义的字符数组都初始化为0.或者直接用memset()把结构体定义的变量初始化为0试一下.你的程序没有具体看,不过应该就是这个问题吧~
沅江市13878858314: 为什么c语言内存溢出就输出烫烫烫 - ?
路纪倍欣: 这有啥根本原因,就是因为字符串里面是乱码呗. 未初始化内存,在C程序运行期间,全部二进制位的值都是110011001100这个样子,十六进制表示为0xcc,作为英文,是不可打印字符,而作为中文(两个字节是一个),0xcccc就是这个“烫”字.
沅江市13878858314: C语言 字符串的输出,为什么输出那么多'烫'呢? - ?
路纪倍欣: 输出"烫烫烫烫"是因为vc会自动把未用函数的局部变量空间按字节全部初始化为CC.而定义的字符数组空间不够,所以就占用了那部分不属于自己的空间,因为cout输出char*是要遇到空字符才停止的,所以便把那些垃圾都打出来了.即是说...
沅江市13878858314: 为什么编程时输入一串字符后会输出一串中文字烫烫烫 - ?
路纪倍欣: 告诉你根本的原因 没有初始化的变量的内存中填充的是0xcccccccc全是十六进制的c 而中文的烫的简码是0xcccc 所以你不赋值就输出 出现了这样的结果!为什么要这样填充? 是为了防止越界访问 安全问题! 为什么能防止越界访问? 是因为0xcc是int 3断点的机器码,当被访问就会断下来!!!呵呵···
沅江市13878858314: C语言 字符串输出时最后出现乱码 - ?
路纪倍欣: 输出出现乱码就是因为字符串结尾并没有结尾符'\0'. gets函数读入一行字符串时,会在最末尾自动加上'\0'结尾.但是你在for循环内将s2的字符一个个拷贝到s中的时候,循环限定条件只到了s2字符串的'\0'结尾符之前,所以输出乱码了. 将循环条件k<a+b改为k<a+b+1或者k<=a+b就可以将s2字符串最末尾的'\0'结尾符也一同赋值到s字符串的最后,输出就可以正常显示.
沅江市13878858314: c语言中输出有个烫字,求高人指点 - ?
路纪倍欣: for(i=0;i<20;i++) {printf("%c",a[i]);} “烫”是你的这一句输出的,键盘输入的字符串字符数少于20个,比如:abcdefg 这一句输出:abcdefg 烫烫烫烫烫烫 共20个字符:7(abcdefg)+1(空格)+6(烫)*2=20 一个中文“烫”是2个字符