基本上我想创建一个二维字符串数组char * grid [4] [4],并希望将它们的索引显示为它们的值。例如,网格[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;
}
答案 0 :(得分: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;
答案 1 :(得分:1)
char * c
存在于for(int j...
循环的范围内,而不在其外部!
char * c = malloc(3);
strcpy(c,'00')