题目要求:在fun函数中 将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指串中剩余的字符形成的新串放在t所指的数组中。我的疑问是1、他给出的答案代码中 形参中 char*s ,s不是一个指针吗,为什么下面变成了数组s[i]? 2、if语句中 应该是s[i]%2==1; 答案为什么可以省略==1; 3、为什么运行崩溃 说 Debug assertion failed。代码如下#include <stdio.h>#include <string.h>void fun(char *s, char t[]){ int i=0,j=0; for(i=0;i<strlen(s);i++) if(!((i%2)==0 &&(s[i]%2))) t[j++]=s[i]; t[j]=0; }void main(){ char s[100], t[100];void NONO (); printf("\nPlease enter string S:"); scanf("%s", s); fun(s, t); printf("\nThe result is: %s\n", t); NONO();}void 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) ;}
t字符串里最后放一个结束字符,不应该是t[j]='\0'吗,他为什么可以写成 t[j]=0?
追答一个数组如果只有前几个有值,后面的自动补成结束符,不需要写
小伙子 多看看指针,书读百遍其义自见
我想问的是:fun的第一个参数 char *s ,s表示的是指针,为什么 fun内 s[i]这里 s又变成了数组。
&&左右两边是布尔型,s[i]%2 他的值可能是1可能是0,题目要求排除 s[i]%2==1的情况,不写==1 他是怎么判断是否为1的?
第1个问题,需要再加强一下指针的学习,指针和数组的关系。指针也可以有下标操作,假设p是指针,p[1]等价于p+1,即指向下一个该类型的存储单元,和数组效果一致,但数组名不可以作+操作。第2个问题,给你举个形象的例子:while(*p){……;p++;},p是一个指向字符串的指针,此时的意思是,p只要不指向'\0',就遍历该字符串,也是巧妙地省略了,本应该是:while(*p != '\0')。回到题目s[i]%2如果为1,不写的话它就是真,写了的话就是1==1,也是真,是不是一样呢
追问还有一个问题,t字符串里最后放一个结束字符,不应该是t[j]='\0'吗,他为什么可以写成 t[j]=0? \0的ascii码是0 功能是null,0不就是一个数字吗。
追答嗯嗯,这个你的理解是正确的。至于他这样写能不能正确我不确定,但提倡你说的规范写法。
经测试:
所以数组初始化时的0和后来单独赋值的0意义应该不一样