精华内容
下载资源
问答
  • #include<string> using namespace std; struct temp { string s; }; int main() { const string p=aaa; temp *q; q=(struct temp*)malloc(sizeof(struct temp)); q->s=p; }  上述那种情况的赋值会...
  • 关于struct结构体string的问题

    千次阅读 2019-08-25 16:23:23
    struct info { // string name;...(1)string是对象,不是一段内存,不适合放在结构体中。 (2)只是在内存中用是可以用string的。 不能记录到文件里面,如果记录到文件里面,就会有问题。 (3)stri...
    struct info
    {
            // string name;       //error
            char name[20];      //ok
            int sex;
    };


    (1)string是对象,不是一段内存,不适合放在结构体中。
    (2)只是在内存中用是可以用string的。
        不能记录到文件里面,如果记录到文件里面,就会有问题。
    (3)string strTestString;
        memset(&strTestString, 0, sizeof(string));//会报segment fault. 错误
        string有一些变量,会保存string类的信息,如果使用memset,这些变量的值会被修改。从而导致string里的值被修改,如果这时  再对其赋值的话,可能像会对空指针赋值一样,导致非法访问错误。
        对于string的对象是不能使用memset的,无论是单独使用还是放在结构体中。
        所以,结构体中使用string一定要小心,最好使用char *,这样使用memset就不会出错。

    展开全文
  • 大家周末好,今天给大家分享c++中的动态数组和动态结构体以及string类的学习总结,在今天写文章之前,给大家分享一个可以面试刷题的地方,如果大家平时没啥事情或者离面试时间比较久,可以尝试去牛客网里面去刷题,...

    大家周末好,今天给大家分享c++中的动态数组和动态结构体以及string类的学习总结,在今天写文章之前,给大家分享一个可以面试刷题的地方,如果大家平时没啥事情或者离面试时间比较久,可以尝试去牛客网里面去刷题,如下图所示:

    0b9d416f4d983ae55f648d484ee13a01.png
    图1

    题库里面有企业面试题目,面试里面有一些网友的面试经验分享,对于缺乏面试经验的网友,我觉得非常不错的机会来提升自己。

    一、动态数组:

    1、面向对象编程与传统的过程性编程的区别:

    面向对象编程它主要是强调在运行阶段(不是在编译阶段)进行决策。运行阶段指的是程序正在运行,编译阶段指的是编译器将程序组合起来时;一个比较形象的比喻:运行阶段就好比度假时,选择参观哪些景点取决于天气和自己的心情(这种方式就比较灵活了);而编译阶段更像是不管什么情况下,都坚持之前的决定(这种方式的话就比较死板了)。

    2、动态数组的创建:

    (1)首先你的弄明白啥动态数组,从字面意思来看,就是这个数组是动态的,可控制的,也就是我们刚才提到的面向对程编程,它侧重程序在运行阶段,这也就是意味着我们动态数组,在运行阶段的时候,如果程序员确实需要它,程序员就可以来创建它;如果不需要它,那么程序员就不用来创建它。

    (2)创建动态数组通用书写格式:

    type_name *pointer_name = new type_name [num_elements]

    我们来看实际例子:

    //new运算符返回第一个数组元素的地址,并把该地址赋给指针p
    int *p = new int[10];

    这里还用两种方式来创建动态数组:第一种就是使用模板类vector;第二种使用模板类array(更方便,更加安全)

    #include 
    using namespace std;
    int n;
    cin>>n;
    vector(int) vi(3);
    vi[0]=1;
    vi[1]=2;
    vi[2]=3
    #include 
    using namespace std;
    array ai = {1,2,3,4,5};

    (3)回收使用new运算符分配的内存空间:

    delete [] p;

    注:我们在c语言里面使用malloc分配内存大小,使用free来释放分配的内存大小。

    同时我们这里可以看到有一个"[]",这个就是要注意一个使用规则了:如果使用new时,带"[]",则使用delete释放内存也要带;反之亦然。下面是错误的使用例子:

    int *pt = new int;
    short *ps = new short[34];
    delete [] pt; //error
    delete ps; //error

    二、动态结构体:

    1、创建动态结构体:

    动态结构体的概念和动态数组的概念理解一致。我们现在来看一下动态结构体时如何被创建的:

    inflatable *p = new inflatable;

    这里将把存储inflatable(表示结构体类型)结构的一块可用内存的地址分配给指针p了。实际例子如下:

    strcut ti{
    int good;
    int bad;

    }

    ti p = new ti;

    三、string类:

    大家应该都知道在c语言里面我们是没用用来表示字符串的数据类型的关键字的,但是我们在c++里面可以使用string关键字来表示字符串数据类型。以前在c语言里面我们要表示字符串的话,一般是下面这种方法来表示:

    char a[12] = "hello world";

    现在我们在c++里面就可以直接使用string来表示一个字符串定义了,不用用数组法那么麻烦了:

    string str1;
    string str2 = "hello world";

    str1=str2;

    str2[1] = e;

    我们可以看到使用string来定义字符串,可以把它赋值给别的字符串变量(正确的说应该是string类实例化的一个对象),同时要访问字符串里面的元素,也可以采用数组下标的方式来访问;同时也可以进行字符串合并:

    str3=str1+str2;

    6e7ab8d9b811ef27a863b376a3c4174a.png

    展开全文
  • 今天在群里听大佬们讲课,结构体里 string 最好定长,不然频繁使用会报指针异常 如果以前没有定长,且没有频繁的去初始化结构体,可以使用下面的语句,在fillchar之前 大佬们经验之谈,又学了一招 finalize(rec)...

    今天在群里听大佬们讲课,结构体里 string[30] 最好定长,不然频繁使用会报指针异常

    如果以前没有定长,且没有频繁的去初始化结构体,可以使用下面的语句,在fillchar之前

    大佬们经验之谈,又学了一招

    finalize(rec);
    fillchar(rec, sizeof(rec), 0);

     

     


    只能说明一个问题:你没用dispose来释放对应的结构体,用的是FreeMem


    或者在dispose之前,你memset/fillchar了结构体


    或:dispose(p: Pointer),而不是:dispose(p: PDataType);


    record不是可以由系统自动内存管理?


    某些情况下不可以,某些可以


    声明了record,从来没手工释放过


    全是当变量在用。用完就不管了


    大部可以的,但出现泄露,一般就是用了指针操作,然后用了freeMem,而不是dispose


    或者上面说的几种情况

    展开全文
  • string> using namespace std; struct temp { string s; }; int main() { const string p="aaa"; temp *q; q=(struct temp*)malloc(sizeof(struct temp)); q->s=p; } 为何这样赋值会内存...
  • 比如这样: /* the struct of the node by adjacency-list representation */ typedef struct { /* the name of node */ string nodename; /* the list of each node */ ve...

    比如这样:

    /* the struct of the node by adjacency-list representation */
    typedef struct
    {
            /* the name of node */
            string nodename;
    
            /* the list of each node */
            vector< string > nodelist;
    
            /* the begin probability of the node */
            vector< float > nodeprob;
    
    } nbnode;
    

    转载于:https://www.cnblogs.com/lxgeek/archive/2011/03/16/1986062.html

    展开全文
  • 一 类型Go语言中内置的基础类型和各类型的初始值为:啥叫初始值?也就是没有初始化的值,比如:var a ...rune是Unicode类型,和int32等价,在后续的文章中讲string的时候会重点介绍,uintptr是无符号整数,存放...
  • Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,SDS)的抽象类型, 并将 SDS 用作 Redis 的默认字符串...
  • 新增结构体字段描述 properties: ...... $fieldname: type: object additionalProperties: type: array items: type: string 然后运行swagger generate,就能创建出value 为切片的map。 // Requ
  • Golang对于结构体和json之间转换特别方便,使用内置的包“encoding/json” ,简单的几行代码就可以做到。按照一个大括号的定义就是一个结构体的规则来处理的,对于结构体定义和json的字段名不一致的可以采用`...
  • #include using namespace std; #include ; #include struct temp ... string s; }; void main() { const string p="aaa"; temp *q; //q=(struct temp*)malloc(sizeof(struct temp)); q = new temp; q->
  • 结构体基础知识和 解析STM32的...它是"weapon"型(类似于我们熟知的int型,String型等),里面有一个char类型,两个int类型。如何给这个结构体赋值以及访问里面的属性?struct weapon weapon_1 = {"weapon_name",100,...
  • 结构体里面的函数指针,结构体成员初始化的时候,函数指针成员被指向函数,从而可以调用函数。 #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; typedef...
  • 网上搜了下有人说string作为结构体成员变量时如果memset此结构体时会有内存泄露,再在代码搜了下发现代码果然memset了一个带string成员变量的结构体。 去掉memset后不再有内存泄漏。 strin...
  • #include<string> enum gender{female,male}; //构造链表结点 typedef struct _Node{ string name; gender sex; struct _Node *next; }Node,*Node_Ptr; //结点生成函数 Node_Ptr init_node(){ Node_Ptr node...
  • 各位大虾,请教一个问题:在定义结构体时其中能够包含string类型的对象吗? 例如,定义一个结构体 #include <string> struct data { string name; // a lot of interesting data }; 教材上说...
  • struct结构体里能放函数吗?

    千次阅读 2020-05-30 20:42:02
    C语言里面不能,在C语言里结构体是一种复合数据类型只能存放数据,不过可以定义一个指向函数的指针进行使用。 C++(C++并发编程多体现) C++可以在结构体内定义函数,用法和class定义类是一样的,说穿了struct 和 ...
  • 声明一个结构体: struct node { int age; string name; double score; }; 这里没给默认值 那么直接输出会怎么样 node temp; cout<<temp.age<<" "<<temp.name<<" "<<temp....
  • 看了open ssl代码里面很多在结构体里面放很多函数指针,然后再来调用,这样比较规范和统一 2 代码实现 #include &lt;stdio.h&gt; #include &lt;assert.h&gt; #include &lt;stdlib.h&...
  • string> using namespace std; struct Subject {<!-- -->  int math;  int english;  int chinese; }; struct Student {<!-- -->  int age;...
  • std::string cc = "hi"; StringCchCopy(bb, cc.size(), cc.c_str());   跟踪的时候 bb的值都是好的 为什么用的时候会出现如下情况呢: bb[0] = '' bb[1] = '' bb[2] = '' bb[3] = '' bb[4] = '
  • 正常情况下,你定义的结构体是这样子的,每个字段都由名字和字段类型组成 type Person struct { Name string Age int Addr string } 也有例外,就像下面这样子,字段上还可以额外再加一个属性,用反引号(Esc...
  • 想了很久,最后终于发现了一种最使用vector数组中存放结构体最简单的方式,可以供大家参考下,题目来源是 c++primer plus 上第4章的编程题的第6道,代码如下: #include &amp;lt;iostream&amp;gt; #include&...
  • 结构体

    2019-09-28 10:45:54
     类里可以定义方法和属性,而结构体里只能有各种成员。 为什么有结构体:  为了表示一些复杂的数据类型,而普通的基本类型变量无法满足要求。 什么是结构体:  结构体是用户根据实际需要自己定义的复合数据...
  • #include<string.h> #include typedef struct ElemType { char number[20]; char name[20]; char academy[10]; int Sd; int math; int English; int total; }ElemType; typedef struct SqList {...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 569
精华内容 227
关键字:

结构体里string