如何将字符串数组附加到共享内存? C

Posted

技术标签:

【中文标题】如何将字符串数组附加到共享内存? C【英文标题】:How to attach an array of strings to shared memory? C 【发布时间】:2012-11-11 18:58:40 【问题描述】:

第一次使用共享内存,我的项目是让读取器和写入器访问共享字符串并修改或读取它们等。我知道 malloc 不起作用但不确定如何将二维字符串数组附加到内存,我一直从编译器那里得到这个:

警告:赋值从没有强制转换的指针中生成整数

    int array_id;                         // id for the shared memory segment
    char records[10][50];                // the shared memory segment array

    // attach the reader to the shared segment
    fread(&newrecord, sizeof(id_record), 1, id_file);
    array_id = newrecord.id;

    printf("%d\n", array_id);

    records[0][0] = (char**) shmat(array_id, (void*) 0, 0);
    if (records[0] == (void*)-1) 
            perror("Array Attachment Reader");
    

arrayid 是正确的,我已经三次检查它没有显示它。

谢谢

【问题讨论】:

【参考方案1】:

您需要附加共享内存,但要存储指针:

char (*records)[10][50];   // Pointer to an array

records = shmat(array_id, (void *)0, 0);

if ((void *)records == (void *)-1) ...error...

strcpy((*records)[0], newrecord);

您试图更改存储records 数组的地址; C 不允许这样做。

【讨论】:

您也可以只使用char (*records)[50],然后使用strcpy(records[0], newrecord);【参考方案2】:

不要这样使用,因为records[0][0]char 类型而不是(char**)

【讨论】:

以上是关于如何将字符串数组附加到共享内存? C的主要内容,如果未能解决你的问题,请参考以下文章

如何从共享内存中分离字符串数组? C

如何从 C 中将新的字符串元素附加到 Swift 中的数组

将字符串附加到 Matlab 数组

C程中如何计算数组(一维及二维)占内存空间的大小

将字符串存储在 mmap 共享数组中? (C)

将数据从全局加载到共享内存时如何避免银行冲突