c语言输出的最后总是以“0”结尾是为啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言输出的最后总是以“0”结尾是为啥?相关的知识,希望对你有一定的参考价值。

#include<stdio.h>
#include<stdlib.h>
struct student
char name[20];<br> char num[15];<br> char sex;<br> int age;<br>sa[2],sb[2];
void main()
FILE *fp;<br>int i;<br>if((fp=fopen("stu_list","wb+"))==NULL)<br>printf("Can't open the file!");<br> exit(0);<br>
printf("input:name num sex age");
for(i=0;i<2;i++)
scanf("%s,%s,%c,%d",sa[i].name,sa[i].num,&sa[i].sex,&sa[i].age);
fwrite(sa,sizeof(struct student),2,fp);
rewind(fp);
fread(sb,sizeof(struct student),2,fp);
for(i=0;i<2;i++)
printf("%s%s%c%d\n",sb[i].name,sb[i].num,sb[i].sex,sb[i].age);
fclose(fp);

你的程序写的有问题,我重新改下,测试通过。你的程序主是由于对scanf函数对字符串的输入接收理解不正确。你的:for(i=0;i<2;i++)
scanf("%s,%s,%c,%d",sa[i].name,sa[i].num,&sa[i].sex,&sa[i].age);
我更改后的:for(i=0;i<2;i++)
printf("第%d位,name:", i+1);
gets(sa[i].name);
printf("第%d位,num:", i+1);
gets(sa[i].num);
printf("第%d位,sex[w,m]:", i+1);
scanf("%c",&sa[i].sex);
printf("第%d位,age:", i+1);
scanf("%d",&sa[i].age);
getchar();[新的程序]#include<stdio.h>
#include<stdlib.h>
struct student
char name[20];<br> char num[15];<br> char sex;<br> int age;<br>sa[2],sb[2];
void main()
FILE *fp;<br>int i, j;<br>if((fp=fopen("stu_list","w+b"))==NULL)<br>printf("Can't open the file!");<br> exit(0);<br>
printf("input:name num sex age\n");
for(i=0;i<2;i++) //main change
printf("第%d位,name:", i+1);
gets(sa[i].name);
printf("第%d位,num:", i+1);
gets(sa[i].num);
printf("第%d位,sex[w,m]:", i+1);
scanf("%c",&sa[i].sex);
printf("第%d位,age:", i+1);
scanf("%d",&sa[i].age);
getchar();
fwrite(sa,sizeof(struct student),2,fp);
rewind(fp);
fread(sb,sizeof(struct student),2,fp);
for(i=0;i<2;i++)
printf("%s,%s,%c,%d\n",sb[i].name,sb[i].num,sb[i].sex,sb[i].age);
fclose(fp);
参考技术A 应该是\0吧!作为结束符用的 参考技术B 正常退出

C语言的字符数组和字符串的区别

从定义到使用,书写格式,输入输出间的区别是什么?
回答越详细,分数越高,我希望真正懂编程的朋友用自己的语言回答我。

1、长度不同:

对于字符数组,其长度是固定的,其中任何一个数组元素都可以为 null 字符。因此,字符数组不一定是字符串。字符串的结尾是以null 字符结尾,所以长度会有所不同。

2、结尾不同

对于字符串,它必须以 null 字符(也就是'\\0',用十六进制表示为 0x00)结尾,其后的字符不属于该字符串。

字符串一定是字符数组,它是最后一个字符为 null 字符的字符数组。字符数组则不会自动增加任何东西。

3、对于字符串,可以直接使用 printf 的 %s 打印其内容;而对字符数组,很显然使用 printf 的 %s 打印其内容是不合适的。

扩展资料:

字符串函数应用

1.连接运算 concat(s1,s2,s3…sn) 相当于s1+s2+s3+…+sn.

例:concat('11','aa')='11aa';

2. 求子串。 Copy(s,I,I) 从字符串s中截取第I个字符开始后的长度为l的子串。

例:copy('abdag',2,3)='bda’

3. 删除子串。过程 Delete(s,I,l) 从字符串s中删除第I个字符开始后的长度为l的子串。

例:s:='abcde';delete(s,2,3);结果s:='ae';

4. 插入子串。 过程Insert(s1,s2,I) 把s1插入到s2的第I个位置

例:s:=abc;insert('12',s,2);结果s:='a12bc';

参考资料:百度百科  c语言(c语言)

参考技术A

C语言的字符数组和字符串的区别:

1、定义的区别

字符数组是用来存放字符的数组。

字符串是由数字、字母、下划线组成的一串字符。

2、使用的区别

字符数组是在C语言中被用来存放字符串的,因为C语言中没有字符串类型,字符串是存放在字符型数组中的。

字符串可以将字符串直接赋值给字符数组,例如:char str[30] = "c.biancheng.net";

3、书写格式的区别

字符数组的书写一般形式为: char 数组名[数据长度] 。

字符串的书写一般记为 s=“a1a2···an”(n>=0)。

4、输入输出的区别

字符数组的输入用getchar()或scanf()的'%c'格式符对数组进行字符赋值。输出用putchar()或printf()的‘%c’格式符对数组进行字符赋值。

字符串在C语言中输出字符串时会逐个扫描字符,直到遇见 '\\0' 才结束输出。

参考资料来源:百度百科——字符数组

百度百科——字符串

参考技术B

1.长度不同

对于字符数组,其长度是固定的,其中任何一个数组元素都可以为 null 字符。因此,字符数组不一定是字符串。字符串的结尾是以null 字符结尾,所以长度会有所不同。

2.结尾不同

对于字符串,它必须以 null 字符(也就是'\\0',用十六进制表示为 0x00)结尾,其后的字符不属于该字符串。

字符串一定是字符数组,它是最后一个字符为 null 字符的字符数组。字符数组则不会自动增加任何东西。

3.对于字符串,可以直接使用 printf 的 %s 打印其内容;而对字符数组,很显然使用 printf 的 %s 打印其内容是不合适的。

4.正规性

C 语言中并不存在字符串这个数据类型,而是使用字符数组来保存字符串。

用来存放字符的数组称为字符数组,例如:

char a[10]; //一维字符数组

char b[5][10]; //二维字符数组

char c[20]='c', ' ', 'p', 'r', 'o', 'g', 'r', 'a','m'; // 给部分数组元素赋值

char d[]='c', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm' ; //对全体元素赋值时可以省去长度

字符数组实际上是一系列字符的集合,也就是字符串(String)。在C语言中,没有专门的字符串变量,没有string类型,通常就用一个字符数组来存放一个字符串。

5.C语言规定,可以将字符串直接赋值给字符数组,例如:

char str[30] = "c.biancheng.net";

char str[30] = "c.biancheng.net"; //这种形式更加简洁,实际开发中常用

扩展资料:

字符串函数应用

1.连接运算 concat(s1,s2,s3…sn) 相当于s1+s2+s3+…+sn.

例:concat('11','aa')='11aa';

2. 求子串。 Copy(s,I,I) 从字符串s中截取第I个字符开始后的长度为l的子串。

例:copy('abdag',2,3)='bda’

3. 删除子串。过程 Delete(s,I,l) 从字符串s中删除第I个字符开始后的长度为l的子串。

例:s:='abcde';delete(s,2,3);结果s:='ae';

4. 插入子串。 过程Insert(s1,s2,I) 把s1插入到s2的第I个位置

例:s:=abc;insert('12',s,2);结果s:='a12bc';

5. 求字符串长度 length(s) 例:length('12abc')=5;

在ASP中 求字符串长度用 len(s)例: len("abc12")=5;

6. 搜索子串的位置 pos(s1,s2) 如果s1是s2的子串 ,则返回s1的第一个字符在s2中的位置,若不是子串,则返回0.

例:pos('ab','12abcd')=3;

7. 字符的大写转换。Upcase(ch) 求字符ch的大写体。

例:upcase(a')='A';

8. 数值转换为数串。 过程 Str(x,s) 把数值x化为数串s.

例:str(12345,s); 结果s='12345';

9. 数串转换为数值。 过程val(s,x,I) 把数串s转化为数值x,如果成功则I=0,不成功则I为无效字符的序数,第三个参数也可不传

例:val('1234',x,I);结果 x:=1234;

参考资料:字符数组-百度百科

参考技术C

C语言的字符数组有两种,比较方式也有所不同。

1 字符串。

C语言的字符串是用字符数组表示的。约定以'\\0'(ascii码0)作为结尾标记。

对于字符串类的字符数组,可以用string.h中的strcmp函数进行比较。

int strcmp(char *str1, char *str2);

其比较规则为:

a, 从左向右依次比较每个元素;

b, 如果出现str1的元素ascii码比较大,则返回1;如果出现str2元素ascii码比较大,则返回-1。如果相等,则继续。

c, 如果一直相等,直到遇到\\0,这时检查是否均为\\0,如果均为\\0,那么返回0;

d, 如果str1到\\0,而str2没到,返回-1; 否则返回1。

总结规则就是,如果str1比str2大,返回1;如果相等,返回0;如果str1小,返回-1。

扩展资料:

注意:实际上,一个char类型字面值是一个int类型字面值的另一种表示方式,只不过使用了一种有趣的句法,例如当42和'*'都表示char类型的值时,它们是两个完全相同的值。

然而,在C++中情况有所不同,C++有真正的char类型字面值和char类型函数参数,并且通常会更仔细地区分char类型和int类型,整数数组和字符数组没有字面值。

然而,如果没有字符串字面值,程序编写起来就会很困难,因此C提供了字符串字面值。

需要注意的是,按照惯例C字符串总是以NUL字符结束,因此C字符串的字面值也以NUL字符结束,例如,“six times nine”的长度是15个字符(包括NUL终止符),而不是你看得见的14个字符。

参考资料:百度百科  c语言(c语言)

参考技术D

C语言的字符数组和字符串的区别如下:

1、对于字符数组,其长度是固定的,其中任何一个数组元素都可以为 null 字符。因此,字符数组不一定是字符串。

2、对于字符串,它必须以 null 结尾,其后的字符不属于该字符串。字符串一定是字符数组,它是最后一个字符为 null 字符的字符数组。

3、C语言中没有一个用于表示字符串的关键字,c语言的字符串由C的字符数组变形而成,末尾加上'\\0',字符串比字符数组多一个'\\0'。

以上是关于c语言输出的最后总是以“0”结尾是为啥?的主要内容,如果未能解决你的问题,请参考以下文章

c语言如果用字符串类型输出字符数组,字符数组最后一个是0,那么为啥会出现乱码

C语言 为啥字符数组倒置输出,输入的最后一个字符没有输出 样例输入 7 ABCDEFG 样例输出 G F E D C B A

C语言的字符数组和字符串的区别

C语言文件输出时,输入数据后为啥会出现乱码

C语言 字符串匹配

一道C语言题,从键盘输入23,为啥输出结果是32?