c – 为什么我不能初始化结构中的char数组?
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的情况下执行此操作? 解决方法
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:
这种从字符串文字(the type of which is 1默认情况下,这至少会是一个警告,例如使用-pedantic-errors构建时会出错. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |