Solidez: inicializa la estructura que contiene la matriz de cadenas

Parece que no puedo inicializar una estructura que contiene una matriz de cadenas. Esto es lo que probé:

contract testStruct {
    struct stru{
        string[] s;
    }

    stru myStru;

    /*
    function add(string s) {
        string[] strAr; // Uninitialized storage pointer. Did you mean ' memory strAr'?
        strAr.push(s);
        myStru = stru(strAr);
    }
    */

    function add(string s) {
        string[] memory strAr; // just doesnt do anything, exception?
        strAr[0] = s;
        myStru = stru(strAr);
    }

    function getFirst(uint i) constant returns (string s) {
        s = myStru.s[0];
    }
}

La primera versión (comentada) me da la advertencia del compilador y no parece escribir nada en el almacenamiento. El segundo parece encontrarse con una excepción (supongo que mirando el consumo de gas). Por lo tanto, mi pregunta es: ¿Cómo inicializo una estructura que contiene una matriz de cadenas?

Respuestas (2)

La otra respuesta que no funcionó me puso en camino para descubrirlo yo mismo:

contract testStruct {
    struct stru{
        string[] s;
    }

    stru myStru;

    function add(string s) {
        myStru.s.push(s);
    }

    function getAt(uint256 i) constant returns (string s) {
        s = myStru.s[i];
    }
}
No necesita asignar la estructura anterior myStrua la nueva sStruct. Lo siguiente también funcionará stru sStruct;. O para ser explícito, está creando una nueva variable de almacenamiento para la estructurastru storage newStru;
gracias @naddison, mejoré y acorté la respuesta.

Pruebe este enfoque. Cree la estructura, luego agréguela a la matriz:

stru sStruct = stru();
sStruct.s.push('hello');
Desafortunadamente, eso no compila: Wrong argument count for function call: 0 arguments given but expected 1. stru sStruct = stru();pero me encaminaste, ¡gracias!