猿问

字符串数组的复制


#include<stdio.h>
#define M 20
int getline(char line[ ]);        //获得字符串
void cpystr(char longest[ ], char line[ ]);            //将最长的字符串复制到 longest[ ]中



int main()

 char line[M],longest[M];
 int len;
 int max=0;
 while((len=getline(line))>0)        // this statement test if there is another line
 {
  if(len>max)
  { 
   max=len;
   cpystr(longest,line);
  }
  
 }
 if(max>0)
  printf("%d\t%s\n",max,longest);  //line[] and longest must be the char type here
 else printf("please input a line\n"); // in case of error here
 return 0;       
}


int getline(char line[])

 int i;
 int c;
 for(i=0;i<M-i && ((c=getchar())!=EOF) && c!= '\n'; i++)
 {
  line[i]=c;
 }
 line[i]='\0';      // this statement can not be left out, it's the symbol of end
 return i-1;


}


void cpystr(char longest[],char line[])
{
 int i=0;
 while((longest[i]=line[i])!='\0')
  i++;
 longest[i]='\0';


}

这个程序是检测输入的字符串,并输出最长的一个字符串及其长度;

在程序中有两处加粗的地方,是给字符串作为结尾。我的问题是为什么上面那个line [i] ='\0'去掉后后影响结果,

而下面那个longest [i] = '\0' 却不已要?

Atlas_Wu
浏览 1379回答 1
1回答

Atlas_Wu

自己想到了原因,就自己回答一下。while((longest[i]=line[i])=!"\0")是先把line[i]的值赋予longest[i],然后才判断是否等于“\0”,因此line[i]最后的“\0”已经赋予给了longest[i],不需要再给最后的longest[i]赋予"\0"
随时随地看视频慕课网APP
我要回答