3 回答

TA貢獻(xiàn)31條經(jīng)驗(yàn) 獲得超8個(gè)贊
可以用來表示字符串結(jié)束標(biāo)志,在你這里如果輸出字符串a(chǎn),就會(huì)變成hell,,,但是你這個(gè)代碼好奇怪,就是這樣

TA貢獻(xiàn)290條經(jīng)驗(yàn) 獲得超0個(gè)贊

TA貢獻(xiàn)112條經(jīng)驗(yàn) 獲得超42個(gè)贊
'\0'的意思是 ASCII 為 0 的字符。 它所的意義是“字符串結(jié)束符”。 比如,一個(gè)字符串 "Hello" ,它是由字符 'H','e','l','l','o','\0' 6 個(gè)字符在內(nèi)存中連續(xù)存放的。程序在見到第一個(gè) '\0' 時(shí)就會(huì)認(rèn)為該字符串結(jié)束了。
這里的a[4]之前的值是‘o’,經(jīng)過a[4]='\0'后,相當(dāng)于將o替換成了結(jié)束字符,那么hello就變成了‘hell’
分析僅僅個(gè)人觀點(diǎn),可以探討。

TA貢獻(xiàn)257條經(jīng)驗(yàn) 獲得超93個(gè)贊
#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貢獻(xiàn)1017條經(jīng)驗(yàn) 獲得超1032個(gè)贊
char?a[20]="HelloWorld";//在賦值時(shí),后方的未被賦值的空間的值是未知的,賦值時(shí)會(huì)在HelloWorld字符串后面自動(dòng)加上一個(gè)字符串結(jié)束符'\0'; //輸出字符串時(shí),以字符'\0'標(biāo)志著字符串結(jié)束 puts(a); a[5]='\0';//截?cái)嘧址麛?shù)組a,預(yù)計(jì)輸出Hello puts(a);
添加回答
舉報(bào)