1

私は C が初めてで、2D 配列を初期化しようとしています。文字列値が含まれるため、配列の両方の列を char * にする必要があります。

intを格納する配列を操作していますが、何らかの理由で、印刷時に文字列値を格納しようとすると、(null). 以下は、データを初期化してintとして保存する方法のコードです(これは機能しているようです)。

int **array;
    int row = 0;

    array = malloc(2 * sizeof(int*));
    int i;
    for (i = 0; i < 2; i++)
    {
        array[i] = malloc(2 * sizeof(int));
    }

    array[0][0] = i;
    array[0][1] = i;

    printf("array[0][0]: %i\n", array[0][0]);

以下は、上記の方法ですが、代わりに文字列値を使用しています。

char **array;
int row = 0;

array = malloc(2 * sizeof(char*));
int i;
for (i = 0; i < 2; i++)
{
    array[i] = malloc(2 * sizeof(char*));
}

array[0][0] = "Test[0][0]";
array[0][1] = "Test[0][1]";

printf("array[0][0]: %s\n", array[0][0]);

ご協力いただきありがとうございます。

4

2 に答える 2

1

C では 2D 配列を使用しないでください。1D 配列を使用する方が便利です。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
    const int nstrings = 2;
    const int width = 20; //width of maximum string.

    char* array = (char*)malloc(sizeof(char)*nstrings*width);
    strcpy(&array[0*width],"Test[0][0]");
    strcpy(&array[1*width],"Test[1][0]");
    printf("string 0: %s\n", &array[0*width]); 
    printf("string 1: %s\n", &array[1*width]);
    free(array);
}
于 2013-06-19T09:58:51.683 に答える