@coborn

Почему при создании динамической строки игнорируется нулевой индекс?

#include <stdio.h>
#include <malloc.h>
#define StrSize 101
#define EOL 10

/*
    Input:
    1
    Output: 
    -------
    Input:
    2
    Sa
    Output:
    Sa
    -------
    *Вопрос почему при вводе игнорируется первая строка
*/


int main(void){
    
    int N; // кол-во строк
    scanf("%d", &N);
    char **Str = (char **)malloc(N * sizeof(char)); // массив строк
    int *StrRealSize = (int *)malloc(N * sizeof(int)); // массив длин строк
    
    for(int i = 0; i < N;i++){
        Str[i] = (char *)malloc(StrSize * sizeof(char));
        char Symbol;
        
        for(int j = 0; j < StrSize;j++){
            scanf("%c",&Symbol);
            if(Symbol != EOL){
                Str[i][j] = Symbol;
            }else{
                StrRealSize[i] = j;
                break;
            }
        }
    }
    
    for(int i = 0; i < N; i++){
        for(int j = 0; j < StrRealSize[i];j++){
            printf("%c",Str[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}
  • Вопрос задан
  • 75 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Первая ошибка:
char **Str = (char **)malloc(N * sizeof(char));
Вы берёте размер символа, а не размер указателя. Должно быть:
char **Str = (char **)malloc(N * sizeof(char *));

Вторая ошибка: вы не пропускаете EOL после ввода N. Правильно:
scanf("%d\n", &N);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
wataru
@wataru
Разработчик на С++, экс-олимпиадник.
Там же число, которое читается через scanf("%d", &N); в первой строке.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы