加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 为什么我不能初始化结构中的char数组?

发布时间:2020-12-16 09:21:39 所属栏目:百科 来源:网络整理
导读:typedef struct book { int a; int b; char cb[100]; book(int a1,int b1,char* cb1) { a = a1; b = b1; cb = cb1; }} book; 为什么我不能将cb初始化为cb1以及如何在没有strcpy的情况下执行此操作? 解决方法 Why can’t I initialise cb to cb1 and how to
typedef struct book {

   int a;
   int b;
   char cb[100];

   book(int a1,int b1,char* cb1) {
       a = a1;
       b = b1;
       cb = cb1;
   }

} book;

为什么我不能将cb初始化为cb1以及如何在没有strcpy的情况下执行此操作?

解决方法

Why can’t I initialise cb to cb1 and how to do it without strcpy?

cb1的类型为char *,但cb是一个C风格的数组,a.k.a.正式作为数组类型的对象(这个特别是char [100]). Objects of array type cannot be modified(即使它们是左值).如果您只希望浅拷贝而不是像您所说的那样strcpy(),那么您可以将cb定义为char *而不是char [100]:

typedef struct book {

   // ...
   char* cb;

   book(int a1,char* cb1) {
       // ...
       cb = cb1;
   }

} book;

但在大多数情况下,我不建议这样做,因为它会导致这个原始指针的不稳定管理.这被标记为[C],任何不使用std :: string的原因?

注意:虽然你没有标记这个[C 11]或更高版本,但是当你尝试使用上面的结构时,进一步的原因是不使用这样的原始指针或C风格的数组,可能是这样的:

int main() {
    book b(4,2,"Hello");
    return 0;
}

一个非常标准的编译器,如Clang会立即让你知道1:

ISO C++11 does not allow conversion from string literal to ‘char *‘.

这种从字符串文字(the type of which is const char[])到char *的隐式转换即使在C 03和现在的completely removed since C++11.中也已弃用

1默认情况下,这至少会是一个警告,例如使用-pedantic-errors构建时会出错.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读