2

基本的に、2 次元の文字列配列 char* grid[4][4] を作成し、インデックスを値として表示したいと考えています。たとえば、grid[2][1] の値は文字列 "21" です。しかし、それらはこのコードのバグであり、実行時にセグメンテーション違反エラーが発生します。私を助けてください。

char* grid[DIMENSION][DIMENSION];

for (int i = 0; i < DIMENSION; i++)
{
    for (int j = 0; j < DIMENSION; j++)
    {   
        char* c = malloc(3 * sizeof(char));
        c = "00\0";            
        c[0] = c[0] + i;
        c[1] = c[1] + j;
        grid[i][j] = c;

    }
}        

for (int i = 0; i < DIMENSION; i++)
{ 
    for (int j = 0; j < DIMENSION; j++)
    {
        printf("%s\t", grid[i][j]);         
    }

    printf("\n");

}

return 0;

}

4

2 に答える 2

2

交換:

 char* c = "00";
 c[0] = c[0] + i;

char c[] = "00";
c[0] = c[0] + i;

通常、文字列リテラルの値を変更することはできません。ではgcc、 を指定することでこの動作を変更できます-fwritable-strings。多くのコンパイラは、文字列リテラルを書き込み不可のセグメントに配置しますが、文字配列として宣言することにより、c書き込み可能であることが保証されます。(ただし、 への割り当てに問題があるgridため、おそらく を使用する必要がありますmalloc。)

char *c = xmalloc(3);  /* xmalloc wraps malloc with error checking */
c[0] = '0' + i;
c[1] = '0' + j;
c[2] = 0;
于 2012-12-07T19:13:46.573 に答える
1

char * cループの外側ではなく、ループのスコープ内に存在しfor(int j...ます!

char * c = malloc(3);
strcpy(c,'00')
于 2012-12-07T19:16:18.743 に答える