Исключение, выданное в 0x6D4DE559 (ucrtbased.dll) в firstapp1.exe: 0xC0000005: Место записи нарушения прав доступа 0x00000000 - PullRequest
0 голосов
/ 13 января 2019

Я посмотрел это в Интернете, и я мог только найти темы для C ++, в то время как я использую C, поэтому я прихожу и спрашиваю, извините, если дублирую.

Я все еще учусь и пытаюсь понять

Я только что узнал о strcpy и strcmp, но мой мозг просто не может понять, почему следующий код не будет работать;

void ifelse();
char nametype[100]; 
char typeofname[100];
char truth[100];

int main() {

    char name[100];
    int age;


    printf("\n Print \n");
    ifelse();
    printf("Enter your name: ");
    fgets(name, 100, stdin);
    printf("Enter your age: ");
    scanf("%d", &age);
    if (age > 50) {
        strcpy(truth[100], "and you are an old person.");
    }
    if (age < 50) {
        strcpy(truth[100], "and you are relatively young.");
    }
    else {
        strcpy(truth[100], "and you're a middle age person with issues...");
    } 

    printf("Hello, your %s is %s, %s", nametype, name, truth);

    return 0;
}

void ifelse() {

    printf("Enter your name type (firstname/lastname): ");
    fgets(typeofname, 100, stdin);
    if (strcmp(typeofname, "firstname") == 0) {
        strcpy(nametype[100], "first name");
    }
    if (strcmp(typeofname, "lastname") == 0) {
        strcpy(nametype[100], "last name");
    }
}

в операторах if и else я получаю сообщение об ошибке при попытке скопировать строку под названием "истина", я также пытался набрать strncpy на всякий случай, но нет.

предполагается, что она продолжит работу функции print внизу, но либо не будет печатать переменные, либо выдаст ошибку распределения

1 Ответ

0 голосов
/ 13 января 2019

strcpy принимает два указателя на буферы, или другими словами - массивы. truth[100] не указатель на буфер, это элемент сразу после массива. Поэтому правильные звонки должны быть такими, как показано ниже:

strcpy(truth, "and you are an old person.");
strcpy(nametype, "first name");

Исправьте все подобные звонки в вашем коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...