Chinaunix首页 | 论坛 | 博客
  • 博客访问: 861988
  • 博文数量: 149
  • 博客积分: 3671
  • 博客等级: 中校
  • 技术积分: 1701
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-03 16:52
文章分类

全部博文(149)

文章存档

2011年(57)

2010年(92)

分类: C/C++

2011-03-10 14:29:18

1,字符数组赋值

char a[10];
怎么给这个数组赋值呢?
1、定义的时候直接用字符串赋值
char a[10]="hello";
注意:不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的!
2、对数组中字符逐个赋值
char a[10]={'h','e','l','l','o'};
3、利用strcpy
char a[10]; strcpy(a, "hello");

易错情况:
1、char a[10]; a[10]="hello";//一个字符怎么能容纳一个字符串?况且a[10]也是不存在的!
2、char a[10]; a="hello";//这种情况容易出现,a虽然是指针,但是它已经指向在堆栈中分配的10个字符空间,现在这个情况a又指向数据区中的hello常量,这里的指针a出现混乱,不允许!

2,memset

1,memset是对字节进行操作 

  int array[5] = {1,4,3,5,2};

  for(int i = 0; i < 5; i++)

  cout<

  cout<

  memset(array,1,5*sizeof(int));// 注意

  for(int k = 0; k < 5; k++)

  cout<

  cout<

  输出的结果就是:

  1 4 3 5 2

  16843009 16843009 16843009 16843009 16843009

  为什么呢?

  因为memset是以字节为单位就是对array指向的内存的5个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是00000001000000010000000100000001,就等于16843009,就完成了对一个INT元素的赋值了。

  所以用memset对非字符型赋初值是不可取的!

  例如有一个结构体Some x,可以这样清零:

  memset( &x, 0, sizeof(Some) );

  如果是一个结构体的数组Some x[10],可以这样:

  memset( x, 0, sizeof(Some)*10 );

2,指针注意

  main(){

  char *s="Golden Global View";

  clrscr();

  memset(s,'G',6);//貌似这里有点问题// 单步运行到这里会提示内存访问冲突

  printf("%s",s);

  getchar();

  return 0;

  } 

  【以上例子出现内存访问冲突应该是因为s被当做常量放入程序存储空间,如果修改为

  char s[]="Golden Global View";则没有问题了。】

常用字符串操作函数的链接:

阅读(4088) | 评论(0) | 转发(3) |
给主人留下些什么吧!~~