为了账号安全,请及时绑定邮箱和手机立即绑定

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条经验 获得超92个赞

#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 关注
  • 10093 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信