问题描述:有一个用字符指针表示的字符串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