无法在结构中存储字符串

时间:2016-04-07 14:23:08

标签: c string pointers struct unions

此代码是更大程序的一部分。我想创建一个结构数组。该结构包含两种数据类型:Tchar,每种都获得用户的输入。我是一个新手,无法通过这个找到我的方式。请帮忙。

生成错误:分段错误11。

char*

1 个答案:

答案 0 :(得分:2)

  1. 你使用arr作为分配的内存,但是你将它分配给添加的返回值,此时内存丢失,你的内存泄漏。

  2. 在add函数中,返回一个指向具有自动存储的变量的指针,该函数在函数返回后不存在。这就是你遇到段错误的原因。

  3. 所以我会在add函数中分配struct,并返回它:

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    typedef struct {
        char ch;
        char str[20];
    } Item;
    
    Item* add(char* str, char ch);
    
    int main(int argc, char const *argv[]){
        int i;
        int n = 3; // number of elements in the array
        Item** arr = malloc(n * sizeof(Item*));
    
        arr[0] = add("cap", 'k');
        arr[1] = add("foo", 'i');
        arr[2] = add("bar", 'j');
    
        printf("%c\n", arr[0]->ch );
        printf("%s\n", arr[0]->str );
    
        for (i = 0; i < n; i++)
             free(arr[i]);
        free(arr);
        return 0;
    }
    
    Item* add(char* str, char ch) {
        Item *i = malloc(sizeof *i);
        strcpy(i->str, str);
        i->ch = ch;
        return i;
    }