Перезаписать символ в массиве с помощью C - PullRequest
0 голосов
/ 28 февраля 2011

Я создаю динамический двумерный массив символов в C:

Примечание: rows и columns являются пользовательским вводом 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 ]

5 голосов
/ 28 февраля 2011

Вы не храните строки, вы храните символы, поэтому все, что вы можете прочитать, это один символ, так что это будет S

Я подозреваю, что следующий символ - O, поэтому, когда вы смотрите на него как на строку, вы получаете SO

printf("'%c'", items[i][j]);
1 голос
/ 28 февраля 2011

Вы храните символы и читаете строки.Попробуйте прочитать символ обратно из массива.

Измените свой код на:

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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...