C语言 —— 把字符指针中的字符串,存入字符数组中

问题描述:有一个用字符指针表示的字符串char *str = "0 12";  有一个数组 char buf[128] = {0}; 现在需要将字符指针表示的字符串"0 12",放入到数组buf中。

一、首先了解一下字符串的表示方式,即c语言中怎样定义字符串

可以用数组来初始化:

例如:char buf[5] = {'a','b','c'}; 或者 char buf[5] = {"abc"}; 或者 buf[5] = "abc";

可以用指针来初始化:

例如:char *pcStr = "abc";

测试代码如下: 

#include <stdio.h>

int main()
{
	char buf[5] = {'a','b','c'};
	//char buf_1[5] = {"a","b","c"}; //错误:字符数组初始值设定项中有多余元素
	char buf_2[5] = {"abc"};
	char buf_3[5] = "abc";
	char *pcStr = "abc";
	int i  = 0;

	for(i = 0; i < 5; i ++)
	{	
        /*结果显示:buf[0]=97 buf[1]=98 buf[2]=99 buf[3]=0 buf[4]=0*/
		printf("buf[%d]=%d ", i, buf[i]); 
	}
	printf("\n");
	
	/*
	for(i = 0; i < 5; i ++)
	{	 
        //结果显示:string.c:6:2: 错误:字符数组初始值设定项中有多余元素
		printf("buf_1[%d]=%d ", i, buf_1[i]);
	}
	printf("\n");
	*/

	for(i = 0; i < 5; i ++)
	{	
        /*结果显示:buf_2[0]=97 buf_2[1]=98 buf_2[2]=99 buf_2[3]=0 buf_2[4]=0*/
		printf("buf_2[%d]=%d ", i, buf_2[i]);
	}
	printf("\n");
	
	for(i = 0; i < 5; i ++)
	{	
        /*结果显示:buf_3[0]=97 buf_3[1]=98 buf_3[2]=99 buf_3[3]=0 buf_3[4]=0*/
		printf("buf_3[%d]=%d ", i, buf_3[i]);
	}
	printf("\n");
	
	while('\0' != *pcStr)   //注意这里的判断条件
	{	
        /*结果显示:*pcStr=97 *pcStr=98 *pcStr=99*/
		printf("*pcStr=%d ", *pcStr);
		pcStr++;
	}
	printf("\n");
	return 0;
}

 二、把指针表示的字符串内容,放入数组中,用数组来表示

#include <stdio.h>

int main(char argc, char *argv[])
{
	int i = 0;
	int j = 0;
	char *str = "0 12";
	char buf[5] = {0};   //最好设置的数组长度比较大,大于或者等于字符串长度

	while(*str != '\0')
	{
		buf[i] = *str;
		i++;
		str++;
	}	
	buf[i] = '\0';   //数组的最后一个字符设置为'\0'
	printf("%s\n", buf);  //打印整个数组的值
	
	for(j = 0; j < 5; j++)
	{
		printf("buf[%d]=%d ", j, buf[j]);   //另一种方式看数组最后的赋值结果
	}
	printf("\n");
	return 0;
}

编译并执行后的结果显示:

[root@localhost test]# make buc_b
cc     buc_b.c   -o buc_b
[root@localhost test]# ./buc_b
0 12
buf[0]=48 buf[1]=32 buf[2]=49 buf[3]=50 buf[4]=0 

分析结果:

可以查看ASCII码,可知,

字符'0'的十进制是48,
空格SPACE的十进制是32,
字符'1'的十进制是49,
字符'2'的十进制是50,
字符'\0'的十进制是0

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值