3 回答

Developer_Zuck
TA貢獻112條經驗 獲得超42個贊
'\0'的意思是 ASCII 為 0 的字符。 它所的意義是“字符串結束符”。 比如,一個字符串 "Hello" ,它是由字符 'H','e','l','l','o','\0' 6 個字符在內存中連續存放的。程序在見到第一個 '\0' 時就會認為該字符串結束了。
這里的a[4]之前的值是‘o’,經過a[4]='\0'后,相當于將o替換成了結束字符,那么hello就變成了‘hell’
分析僅僅個人觀點,可以探討。

qq_莫非
TA貢獻257條經驗 獲得超93個贊
#include?<stdio.h> #include?<strings.h> #include?<unistd.h> #include?<sys/types.h> #include?<sys/socket.h> #include?<netinet/in.h> #include?<arpa/inet.h> #include?<stdlib.h> #include?<string.h> #define?PORT?1234 #define?BACKLOG?5 #define?MAXDATASIZE?1000 void?process_cli(int?connfd,struct?sockaddr_in?client); int?main(){ ????int?listenfd,connfd; ????pid_t?pid; ????struct?sockaddr_in?server; ????struct?sockaddr_in?client; ????int?len; ????if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1){ ????????perror("Creating?sock?falied"); ????????exit(1); ????} ????????int?opt=SO_REUSEADDR; setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); bzero(&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(PORT); server.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(listenfd,(struct?sockaddr?*)&server,sizeof(server))==-1){ perror("Bind?error"); exit(1); } if(listen(listenfd,BACKLOG)==-1){ perror("listen()?error\n"); exit(1); } len=sizeof(client); while(1){ if((connfd=accept(listenfd,(struct?sockaddr?*)&client,&len))==-1){ perror("accept()?error\n"); exit(1); } if((pid=fork())>0){ close(connfd); continue; }else?if(pid==0){ close(listenfd); process_cli(connfd,client); exit(0); }else{ printf("fork()?error\n"); exit(0); } } close(listenfd); } void?process_cli(int?connfd,struct?sockaddr_in?client){ int?num; char?recvbuf[MAXDATASIZE],sendbuf[MAXDATASIZE],cli_name[MAXDATASIZE]; printf("You?got?a?connection?from?%s.\n",inet_ntoa(client.sin_addr)); num=recv(connfd,cli_name,MAXDATASIZE,0); if(num==0){ close(connfd); printf("Client?disconnected.\n"); return; } cli_name[num-1]='\0'; printf("Client's?name?is?%s.\n",cli_name); ????????printf("Client's?port?is?%d.\n",ntohs(client.sin_port)); while(num=recv(connfd,recvbuf,MAXDATASIZE,0)){ recvbuf[num]='\0'; //printf("Received?client(%s)?message:%s",cli_name,recvbuf); ????????????????if(!strcmp(recvbuf,"quit")){//判斷用戶輸入的是否是quit ????????????????????break; ?????????????????} int?i=0; for(i=0;i<num-1;i++){ if((recvbuf[i]>='a'&&recvbuf[i]<='z')||(recvbuf[i]>='A'&&recvbuf[i]<='Z')){ recvbuf[i]=recvbuf[i]+4; if((recvbuf[i]>'Z'&&recvbuf[i]<='Z'+4)||(recvbuf[i]>'z')) recvbuf[i]=recvbuf[i]-26; } sendbuf[i]=recvbuf[i]; } sendbuf[num-1]='\0'; ????????????????printf("The?encrypted?message?from?client(%s)?is:%s\n",cli_name,sendbuf); send(connfd,sendbuf,strlen(sendbuf),0); } close(connfd); }

望遠
TA貢獻1017條經驗 獲得超1032個贊
char?a[20]="HelloWorld";//在賦值時,后方的未被賦值的空間的值是未知的,賦值時會在HelloWorld字符串后面自動加上一個字符串結束符'\0'; //輸出字符串時,以字符'\0'標志著字符串結束 puts(a); a[5]='\0';//截斷字符數組a,預計輸出Hello puts(a);
- 3 回答
- 0 關注
- 10461 瀏覽
添加回答
舉報
0/150
提交
取消