C语言符串输出时最后出现乱码,C语言 字符串输出时最后出现乱码

2020-11-26 08:34:40 字数 6074 阅读 1791

1楼:匿名用户

输出出现乱码就是因为字符串结尾并没有结尾符'\0'。

gets函数读入一行字符串时,会在最末尾自动加上'\0'结尾。但是你在for循环内将s2的字符一个个拷贝到s中的时候,循环限定条件只到了s2字符串的'\0'结尾符之前,所以输出乱码了。

将循环条件k

2楼:匿名用户

#include

#include

intmain()

{inta,b,k;

chars1[1000],s2[1000],ex;

gets(s1);

gets(s2);

a=strlen(s1);

b=strlen(s2);//计算字符串长度//chars[a+b+1];

memcpy(s,s1,a);//把s1放入s中//for(k=a;k

c语言,字符串输出是乱码是怎么回事?

3楼:圈圈叉叉叉叉圈

字符串使用前请使用清空语句把垃圾内存清理成'\0',也就是0x00(0):

memset(str2, 0x00, sizeof(str2));

当然,也可以在声明的时候进行初始化:

char str2[20] = ;

这句也能实现同样的效果。这是c语言习惯,务必养成!

'\0'是字符串结束符,每当解释器看到这'\0'才会认为字符串终止,而你的程序明显没有字符串结束符,所以连同垃圾内存一起读出来了。“烫烫。。”等就是垃圾内存。

不明白欢迎追问

c语言 字符串输出时最后出现一个乱码 **等

4楼:一粟沧海

是你的for (i = 0; i <= len; i++),多输出了一个字符,改成for (i = 0; i < len; i++)即可,记住c中数组都是从0开始数的。

5楼:匿名用户

for (i = 0; i <= len; i++)

两个这个地方都要写成 < 不能等于

6楼:铸信

修改这里:len = strlen(cs)-1;

7楼:利芳懿邶豆

因为你的字符串数组错误的引用了存在脏数据的内存要避免,就要初始化数组

memset(str,0,n)

将str字符串中前n个字节替换为0并返回str;

str为你定义的字符串,n为字符串容量,并非长度,即chara[20],不管你有几个字符,n为20为佳加上头文件string.h

****华夏联盟,亲

c语言,字符串输出是乱码

8楼:圈圈叉叉叉叉圈

字符串使用前请使用清空语句把垃圾内存清理成'\0',也就是0x00(0):

memset(str2, 0x00, sizeof(str2));

当然,也可以在声明的时候进行初始化:

char str2[20] = ;

这句也能实现同样的效果。这是c语言习惯,务必养成!

'\0'是字符串结束符,每当解释器看到这'\0'才会认为字符串终止,而你的程序明显没有字符串结束符,所以连同垃圾内存一起读出来了。“烫烫。。”等就是垃圾内存。

不明白欢迎追问

9楼:

struct s p[4];只是声明了一个名为p的struct s型数组,还没有为其赋值,里面全是机器垃圾,你就用for(i=0;...)printf...输出,能得到正常数据吗?

都是垃圾,当然是乱码!另:全局数组p的中是4,=右边却用5个元素初始化,越界了!!

10楼:自恋狂

你几个地方写错了,我在里面有注释,分别有:

1、赋值地方,应该是a[i][j],这里i、j代表第几个,你用student这些固定值,一看就知道错了不是吗?而且这是个非常严重的错误,a[i][j]这里面i不能等于student,j不能等于subiects,你们下标取值0到student-1,你自己写完看看都知道错了

2、sum每次循环前要赋0,否则会把前一个学生的成绩加进去

3、ave=sum*1.0/4,不乘1.0的话,系统会把sum/4当成一个整型,会造成结果不正确

#include

#define subiects 3 //学科数量

#define students 4 //学生人数

int main(void)

;int i = 0, j = 0, sum = 0;//sum为总分

double ave;//ave为平均值

//输入成绩

for (i = 0; i < students; i++)

}//输出成绩

printf("\t\tc语言\t大英\t高数\t总分\t平均分\n");

for (i = 0; i < students; i++)

ave = sum*1.0 / subiects;

printf("\t%d\t%.2f\n",sum,ave);

}printf("\n\n");

//颠倒输出

sum = 0;

ave = 0;

printf("\t");

for (i = 0; i < students; i++)

printf("\t同学%d", i + 1);

printf("\t平均分\n");

for (j = 0; j < subiects; j++)

ave = sum*1.0 / students;

printf("\t%.2f\n",ave);

}return 0;}

11楼:匿名用户

主要错误有三个,第一:后面所有的a[students][subiects]变成a[i][j]

在计算每个同学的总分和平均分的时候要将sum的初值设置为0吧

在计算平均分的时候,你的语句是ave = sum / students;ave = sum / subiects

这个是不对的,应改为,ave =1.0* sum / students,ave =1.0* sum / subiects原因在于 假设sum=7,students=3,则ave=7/3=2,而实际想要的结果为2.

3333

#include

#definesubiects3//学科数量

#definestudents4//学生人数

intmain(void)

;inti=0,j=0,sum=0;//sum为总分

doubleave;//ave为平均值

//输入成绩

for(i=0;i

}//输出成绩

printf("\t\tc语言\t大英\t高数\t总分\t平均分\n");

for(i=0;i

ave=1.0*sum/subiects;

printf("\t%d\t%.2f\n",sum,ave);

}printf("\n\n");

//颠倒输出

sum=0;

ave=0;

printf("\t");

for(i=0;i

printf("\t同学%d",i+1);

printf("\t平均分\n");

for(j=0;j

ave=1.0*sum/students;

printf("\t%.2f\n",ave);

}return0;}

12楼:

#include

#include

#include

int random(int num);

void main()

printf("请依次输入学生姓名:");

for(i=0;i被点到的同学的名字是:");

printf("%s ",p[random(n-1)]);

}int random(int num)

13楼:匿名用户

你好没有乱码

就是逻辑上有些错误如图:

14楼:匿名用户

按照程序是在a字符

串中隔一个字符取一个形成b字符串

void main()

half(a);

}输出24680bdfhj

如果出乱码,可能你的a数组赋值方面有问题,不知道你是如何定义a数组和调用函数的

15楼:匿名用户

输出乱码是必须的,

因为你的数据类型搞错了,

你使用的是字符函数stringcopy()来拷贝字符;

那么要处理的数据当是char类型,

然而你所定义的指针应当也是char类型;

你应当修改的地方是

int *str1,*str2;//请将int改为char

16楼:匿名用户

没什么问题,第一个for循环后多了一个分号;只要保证你传入该函数的数组a中有准确的二十个字符就行,如:char a=;

17楼:

while(1)

else }

18楼:匿名用户

把读循环改为 : while(fgets(str,120,fp) != null) printf("%s\n",str);

这样就不需要直接检查文件是否结束,这是因为fgets()函数在读满120个字符或遇到'\n'时,就返回str的首址。在读文件时,测试是否到文件结束经常出错,我看见高手们都很少使用feof();函数,原因大概在此吧!

19楼:匿名用户

原因向他们说的那样, char a是一个局部变量, 函数返回后他在栈上的空间就自动释放了...

可以这样改下:

#include

#include

#include

#include

using namespace std;

#define max_len 10

char* getnick()

return a;

}void main()

20楼:匿名用户

getnick函数内的数组a是局部数组,在栈上分配空间``,当getnick执行完后,栈空间会被**

可把a定义为全局变量或动态申请空间(在堆中分配空间)

21楼:匿名用户

getnick 返回的a,是一个局部变量,当getnick返回后,这个变量就无效了,这个变量所指内存中的内容变得不可**,打印出来的当然不行了。你要么把 a 声明在函数外面,作一个全局变量,要么在getnick里

static char a = ....;

22楼:匿名用户

你的 str2 没有加结束字元

加上 str2[n] = '\0';

就能滤掉後面的乱码了

23楼:匿名用户

if( !(file = fopen(name, "wb")))

你是以二进制的方式打开文件的,用“w+”吧: fopen(name, "w+")

24楼:匿名用户

#include

int main()

str2[n]='\0';

}puts(str2);

putchar('\n');

return 0;

}就是 str2 的结束加上结束符‘\0’

25楼:郭城仉嘉容

intm[i];

改成int

m[i]=;

试下因为m字符串有可能没有初始化,最后没有终结符,造成最后几个字符随机内存值乱码。