C语言字符指针赋值的问题

1、定义的时候直接赋值:

char arr[10] = {"kitty"};

字符串:
char arr[] = {"kitty"};或 char arr[] = "kitty";
上面的初始化等价于:char c[5]={‘k’,’i’,’t’,’t’,’y’,’\0’};
而不等价于:charc[5]={‘k’,’i’,’t’,’t’,’y’};
如何将字符串赋值给字符数组
strcpy(字符数组1,字符串2)
char str1[10]=’’, str2={“Hello”};
strcpy(str1,str2);
执行后str1状态为:
H e l l o \0 \0 \0 \0 \0

 

1)“字符数组1”必须写成数组名形式(如str1),“字符串2”可以是数组名,也可以是字符串常量。
strcpy(str1, “Hello”);

2)不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。
如下面两句都是不合法的:
str1=”Hello”;
str1=str2;

而只能用strcpy函数将一个字符串复制到另一个字符数组中去,赋值语句只能将一个字符赋给一个字符型变量或者字符数组元素。如下面的语句是合法的:

char c[5],c1,c2;

c1=’A’;c2=’B’;

c[0]=’H’; c[1]=’e’; c[2]=’l’; c[3]=’l’; c[4]=’o’;

 这种写法也可以直接省略花括号,直接写成:

char arr[10] = "kitty";

2、初始化列表,把各个字符依次赋给数组中的元素:

char c[5];
c[0]=’H’; c[1]=’e’; c[2]=’l’; c[3]=’l’; c[4]=’o’;

char arr[10] = {'k','i','t','t','y'}
(1)如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预测的;

(2)如果花括号中提供的初值个数(即字符个数)大于数组长度,则按语法错误处理;

(3)如果花括号中提供的初值个数(即字符个数)小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即‘\0’);

 

这种写法是不可以省略花括号的。

3、利用字符串处理函数 
strcpy( str1, str2)可以将字符串2的内容复制到字符串1中。

char arr[10];
strcpy(arr, "kitty");

利用字符串处理函数对字符串进行赋值,要注意(1)字符数组1必须定义的足够大,以便容纳字符串2;(2)需要包含头文件string.h 

对一维数组进行赋值时需要注意的易错情况: 
情形一:

char arr[10];
arr[10] = "kitty";

数组元素的下标是从序号0开始,arr[10]最大的下标值为9,况且arr[10]指的是下标为10的元素,一个字符是无法容纳一个字符串的。

情形二:

char arr[10];
arr = "kitty";

arr虽然是个指针,但是它已经指向了堆栈中的10个字符空间,无法指向”kitty“这个常量了。
 

 

strlen函数是测试字符串实际长度(不包含‘\0’在内)的函数。

char c[10]=”Hello”’

printf(“%d”,strlen(c)); 或者Printf(“%d”,“Hello”);  输出为5

 

char a[ARRAY_SIZE]; 
char b[ARRAY_SIZE]; 
这是两个已开辟空间的了数组

void Initialize (char * a, char * b) 这是两个形参,纯指针!

 Initialize(a, b); 这句过后,形参指针ab就分别指向了数组ab!
a[0] =.....这是通过指针a间接往数组a赋值!

b = a;//b指针本来指向数组b ,但这句边变成把b指针指向a指针所指向的空间,也就是b指针也指向了数组a,而不是内容copy!

 

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值