使用C覆盖数组中的字符

时间:2011-02-28 08:26:35

标签: c arrays pointers gcc

我正在用C:

创建一个动态的二维字符数组

注意:rowscolumns是用户输入integers

char** items;
items = (char**)malloc(rows * sizeof(char*));
int i;
for(i = 0; i < rows; i++)
{
    items[i] = (char*)malloc(columns * sizeof(char));
}

int j;
for(i = 0; i < rows; i++)
{
    for(j = 0; j < columns; j++)
    {
        items[i][j] = 'O';
    }
}

稍后在我的代码中,我尝试覆盖数组中的特定位置:

items[arbitraryRow][arbitraryColumn] = 'S';

但结果是该行/列中的字符现在是'SO'

我做错了什么?

更新: 这就是我打印数组的方式:

int i;
for(i = 0; i < rows; i++)
{
    printf("[");
    int j;
    for(j = 0; j < columns; j++)
    {
        printf("'%s'", &items[i][j]);
        if(j != columns - 1)
            printf(", ");
    }
    printf("]");
    printf("\n");
}

2 个答案:

答案 0 :(得分:5)

你没有存储你正在存储字符的字符串,所以你只能阅读一个字符,这就是S

我的怀疑是下一个角色是O所以当你把它看作一个字符串时你会得到SO

printf("'%c'", items[i][j]);

答案 1 :(得分:1)

您正在存储字符和读取字符串。尝试从数组中读回字符。

将您的代码更改为:

int i; 
for(i = 0; i < rows; i++) 
{
     printf("[");
     int j;
     for(j = 0; j < columns; j++)
     {
         printf("'%c'", items[i][j]);
         if(j != columns - 1)
             printf(", ");
     }
     printf("]");
     printf("\n");
}