分享

很基础的结构体里的字符数组赋值问题

 LBubble 2011-12-19
一般的字符数组可以这么赋值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
  • llmiss用户头像
  • llmiss
  • (llmiss)
  • 等 级:
#3楼 得分:0回复于:2008-07-09 10:32:05
哦,但是为什么r.a[20]="abc\rdefghiaaaaaaaa"这样不行列
  • xkyx_cn用户头像
  • xkyx_cn
  • (飞翔的鱼)
  • 等 级:
  • 2

#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);
  • llmiss用户头像
  • llmiss
  • (llmiss)
  • 等 级:
#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用户头像
  • CXBID
  • (冰彬)
  • 等 级:
#7楼 得分:4回复于:2008-07-09 10:34:54
r.a[20]="abc\rdefghiaaaaaaaa";这句话的意义是想a的第21个元素赋值,当然不行了。
  • llmiss用户头像
  • llmiss
  • (llmiss)
  • 等 级:
#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必须指定字符串长度,所以风险小

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多