Ошибка сегментации в Ubuntu GCC

#include<stdio.h>
int main()
{
    char *ch;
    int n=10;
    gets(ch);
    puts(ch);
    printf("%d\n",n);

}   

#include<stdio.h>
int main()
{
    char *ch;
    int n=10;
    gets(ch);
    printf("%d\n",n);
    puts(ch);

}   

В первом случае ошибка сегментации возникает при print(n), а во втором - при put (ch). Ошибка не возникает, если print(n) также используется сразу после объявления n.

3 ответа

gets() разыменовывает унитизированный указатель, вызывая неопределенное поведение.

Выделите память для ch и не используйте gets() поскольку нет никакого способа ограничить число читаемых символов, что означает возможность записи за пределы массива назначения.

Пример использования fgets():

char ch[128];
if (fgets(ch, 128, stdin))
{
}

Используйте fgets и выделите память для своего "буфера" (через malloc) для хранения заданной строки. В конце звоните бесплатно за указателем.

#include<stdio.h>
#include<stdlib.h>
    int main(){
        char * ch = (char*) malloc(sizeof(char)*10);
        //or by using this: char ch[10];
        int n=10;
        gets(ch);
        puts(ch);
        printf("%d\n", n);
        free(ch);
}
Другие вопросы по тегам