t [ j ] ='\0' 与 t [ j ]=0 都是结束符,有什么区别C语言中
#include <string.h>
void fun(char *s, char t[])
{
int i, j=0;
for(i=0; i<strlen(s); i++)
if(s[i]%2)
t[j++]=s[i];
t[j]=0; 这里的t [ j ]=0能改成t [ j ] ='\0' 吗?
}
main()
{
char s[100], t[100];
printf("\nPlease enter string S:"); scanf("%s", s);
fun(s, t);
printf("\nThe result is: %s\n", t);
NONO();
}
NONO ()
{/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */
char s[100], t[100] ;
FILE *rf, *wf ;
int i ;
rf = fopen("in.dat","r");
wf = fopen("out.dat","w");
for(i = 0 ; i < 10 ; i++) {
fscanf(rf, "%s", s);
fun(s, t);
fprintf(wf, "%s\n", t);
}
fclose(rf);
fclose(wf);
}
输入abc后调试出来的结果是这样的 如果改的话 展开
1.类别不同。
'\0' 是字符型char,0是整型int;
2.占用长度不一样。
字符型变量用于存储一个单一字符,在 C 语言中用 char 表示,其中每个字符变量都会占用 1 个字节(8位二进制数)。整型int在内存中占用空间为四个字节(32位二进制数)
3.表现形式不一样。
字符'\0' :ASCII码为0,表示一个字符串结束的标志。这是转义字符(整体视为一个字符)。由于内存中存储字符,依然是存储的是对应字符集的字符编码;所以内存中的表现形式为00000000
整数0 :内存中表示为:00000000 00000000 00000000 00000000;虽然都是0,但是跟上面字符'\0'存储占用长度是不一样的。
扩展资料:
其实所有编程语言,拥有转义字符的原因基本上是两点:
一、使用转义字符来表示字符集中定义的字符,比如ASCll里面的控制字符及回车换行等字符,这些字符都没有现成的文字代号。所以只能用转义字符来表示 。
二、某一些特定的字符在编辑语言中被定义为特殊用途的字符。这些字符由于被定义为特殊用途,它们失去了原有的意义。
比如说Html中,<被HTML定义为标签的开始,所以当我们转入<时,HTML就会把它当作为开始,而不是当作一个<来看待。再如PHP 的双引号("),被PHP定义为字符串的外围标签,所以如果你在一对双引号里面,还想要使用双引号,只能使用转义字符了。
参考资料:
没有区别,写t[j]='\0'与写t[j]=0效果一样。因为'\0'是预定义的符号常量,其值就是0。'\0'常用于字符串结束标记,而0就是普通的即时常量,所以代码中给字符数组最后一位添加结束标记形成字符串时写'\0'而不写0具有提示意义,便于阅读,没有别的意思。下面代码可验证它们的效果一样:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int main(void){
char a=0,b='\0',m[]={'1','2','3','4','5',0},n[]={'a','b','c','\0'};
printf("a = %d\nb = %d\nm = %s\nn = %s\n",a,b,m,n);
return 0;
}
好吧,先解释你的问题。
0的ASCII码为048,‘\0’的为000,本质上不同。‘\0’才是结束符(C-string中),‘\0’=0(码)=NULL,是空与结束的标志,控制字符之一。
题意如果是使得字符串结束,应该用‘\0’而不是0。
你的程序的其他问题:
1、字符数组越界了吧。。。既能导致一大堆烫烫烫什么的出现也可以使得程序直接崩溃。
2、NONO()在主函数中未定义,引用出错
3、文件路径不对(在你的写文件函数中)
如果可以的话,把题目给我,我以你的程序为架子改进下再给你试试。
题目就是这。。
void fun(char *s, char *t)
{
int i=0,j=0;
while(s[i]!='\0')
{
if(s[i]%2)t[j++]=s[i];
i++;
}
t[j]='\0';
}
这是我写的fun函数部分,既然题目要求不让改动main,NONO函数部分,那就只好不改。。。说实话那个题目给的函数也太水了。。。。
解释下我的函数:while循环直到原字符串结束,if则是判断,每次循环后i加一,这些都很基本,没什么解释得。
我的函数部分通过了测试。。。如果有其他问题,你可以尝试把写文件函数全变成注释后调试,应该没问题的。
当然,长度不能超过99。。。
%c 字符
%d 有符号十进制整数
%f 浮点数(包括float和doulbe)
%e(%E) 浮点数指数输出[e-(E-)记数法]
%g(%G) 浮点数不显无意义的零"0"
%i 有符号十进制整数(与%d相同)
%u 无符号十进制整数
%o 八进制整数 e.g. 0123
%x(%X) 十六进制整数0f(0F) e.g. 0x1234
%p 指针
%s 字符串
%% "%"
2.标志
左对齐:"-" e.g. "%-20s"
右对齐:"+" e.g. "%+20s"
空格:若符号为正,则显示空格,负则显示"-" e.g. "% 6.2f"
#:对c,s,d,u类无影响;对o类,在输出时加前缀o;对x类,在输出时加前缀0x;
对e,g,f 类当结果有小数时才给出小数点。
3.格式字符串(格式)
〔标志〕〔输出最少宽度〕〔.精度〕〔长度〕类型
"%-md" :左对齐,若m比实际少时,按实际输出。
"%m.ns":输出m位,取字符串(左起)n位,左补空格,当n>m or m省略时m=n
e.g. "%7.2s" 输入CHINA
输出" CH"
"%m.nf":输出浮点数,m为宽度,n为小数点右边数位
e.g. "%3.1f" 输入3852.99
输出3853.0
长度:为h短整形量,l为长整形量
文章出处:
2011-03-06 · 知道合伙人数码行家
可是我用的上机模拟软件我只要改成这样系统就给我评0分 调试出来运行的结果也有差异啊