亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C語言里面一個數組最后的\0表示什么意思?

C語言里面一個數組最后的\0表示什么意思?

qq_莫非 2017-10-11 12:51:09
比如char?a[20]; a="hello"; a[4]='\0'; 這里'\0'表示什么意思
查看完整描述

3 回答

已采納
?
馮寶寶

TA貢獻31條經驗 獲得超8個贊

可以用來表示字符串結束標志,在你這里如果輸出字符串a,就會變成hell,,,但是你這個代碼好奇怪,就是這樣

查看完整回答
1 反對 回復 2017-10-11
  • qq_莫非
    qq_莫非
    真的這樣輸出的是hell?
  • 馮寶寶
    馮寶寶
    其實按照你這個代碼寫,,是報錯,沒有輸出的,,,,,所以說你代碼好奇怪,你先定義了一個字符數組,然后直接復制,這樣是不對滴,你需要像char a[20]="hello"; //a="hello"; puts(a); a[4]='\0'; puts(a); }輸出真的是hell不信你自己試試,編譯一下就知道了
  • qq_莫非
    qq_莫非
    那你可以幫幫忙看看這個程序嗎?里面用到了
點擊展開后面1
?
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’

分析僅僅個人觀點,可以探討。

查看完整回答
反對 回復 2017-10-11
?
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);
}


查看完整回答
反對 回復 2017-10-11
  • 馮寶寶
    馮寶寶
    你是在做sockit網絡編程方面么,,,,,,太無聊了,沒有學好,有啥問題你直接問他們就可以了,
?
望遠

TA貢獻1017條經驗 獲得超1032個贊

	char?a[20]="HelloWorld";//在賦值時,后方的未被賦值的空間的值是未知的,賦值時會在HelloWorld字符串后面自動加上一個字符串結束符'\0';
	//輸出字符串時,以字符'\0'標志著字符串結束
	puts(a);
	a[5]='\0';//截斷字符數組a,預計輸出Hello
	puts(a);


查看完整回答
反對 回復 2017-10-11
?
YanIsPower

TA貢獻8條經驗 獲得超9個贊

\0'這個表示字符串結束符

查看完整回答
1 反對 回復 2017-10-11
  • 3 回答
  • 0 關注
  • 10461 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號