打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
很基础的结构体里的字符数组赋值问题
一般的字符数组可以这么赋值char a[20]="abc\rdefghiaaaaaaaa";
但是如果定义在结构体里struct stra{
char a[20];
int length
};
就不能stra r;r.a[20]="abc\rdefghiaaaaaaaa"这样赋值,如果字符串小于19,会提示cannot convert from 'char [19]' to 'char [20],如果等于19,提示left operand must be l-value,这个是为什么,如果以后要动态给结构体的字符数组赋值该怎么搞
#1楼 得分:4回复于:2008-07-09 10:28:08
strcpy(r.a, "abcdefg");
#2楼 得分:4回复于:2008-07-09 10:30:18
strcpy
#3楼 得分:0回复于:2008-07-09 10:32:05
哦,但是为什么r.a[20]="abc\rdefghiaaaaaaaa"这样不行列
#4楼 得分:4回复于:2008-07-09 10:33:23
除了巴乔提供的方法,还可以:
C/C++ code
// 1. 初始化赋值struct stra r = {"abc\rdefghiaaaaaaaa", 19};// 2.内存拷贝struct stra r;char *s = "abc\rdefghiaaaaaaaa";memcpy(r.a, s, strlen(s) + 1);
#5楼 得分:0回复于:2008-07-09 10:34:22
感谢,但是为什么r.a[20]="abc\rdefghiaaaaaaaa"不行列
#6楼 得分:4回复于:2008-07-09 10:34:27
r.a[20]="abc\rdefghiaaaaaaaa"
这样相当于是给a的第20号元素赋值,况且也只有初始化的时候可以用字符串来赋值,其他时候都只能用字符,或者用strcpy
  • CXBID
  • (冰彬)
  • 等 级:
#7楼 得分:4回复于:2008-07-09 10:34:54
r.a[20]="abc\rdefghiaaaaaaaa";这句话的意义是想a的第21个元素赋值,当然不行了。
#8楼 得分:0回复于:2008-07-09 10:36:50
感谢感谢
#9楼 得分:0回复于:2008-07-09 10:49:26
最好不要用strcpy,因为这个函数容易造成缓冲区溢出。用strncpy。看下面的例子 
 void function(char *str) {
  
  char buffer[16];
  
  strcpy(buffer,str);
  
  }
  
  上面的strcpy()将直接吧str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。
由于strncpy必须指定字符串长度,所以风险小
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C++中字符串的介绍
C语言 字符指针和字符数组的区别
C语言测试题的讲解分析
谈新手对CString的使用
memset
(const) char *转CString 详解(字符串类型转换详解,不断补充)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服