Не удается получить доступ к памяти по адресу - PullRequest
0 голосов
/ 02 декабря 2018
 char* dayOfProgrammer(int year) {
 char s[15];
if (year >= 1700 && year < 1918) {
if (year % 4 == 0) {
    strcpy(s,"12.09.");
  strcat(s,(char*)(intptr_t)year);
} else {
    strcpy(s,"13.09.");
  strcat(s,(char*)(intptr_t)year);
}
}
if (year >1918 && year < 2700) {
    if(year%400==0 || (year%4==0 && year%100!=0)){
        strcpy(s,"12.09.");
      strcat(s,(char*)(intptr_t)year);
    }else{
        strcpy(s,"13.09.");
      strcat(s,(char*)(intptr_t)year);
    }
}
if(year==1918){
    strcpy(s,"26.09.");
  strcat(s,(char*)(intptr_t)year);
    }  return s;    }

Я когда-либо пытался получить вывод, но он показывает ошибку

 0x00007fc49d95dc85 in __strcpy_chk (dest=0x7ffed426cc9f "", 
src=0x7e1 <error: Cannot access memory at address 0x7e1>, destlen=15)
at strcpy_chk.c:28

Моя задача - добавить указатель char и число, например, ("12.09." + Некоторое число).

Если у вас есть какой-либо метод, пожалуйста, предложите.Я также попытался использовать память, но она также не работала.Я обнаружил, что очень трудно присоединиться к строке указателя и int

1 Ответ

0 голосов
/ 02 декабря 2018
strcpy(s,"12.09.");
strcat(s,(char*)(intptr_t)year);

Скорее всего, это не то, что вы думаете.Вы приводите год к адресу и пытаетесь получить к нему доступ, который почти во всех случаях вызывает неопределенное поведение.Вы должны взглянуть на функцию snprintf, которая подходит для этой задачи:

snprintf(s, sizeof s, "12.09.%d", year);

Следующая проблема состоит в том, что вы пытаетесь вернуть локальный массив, который также приводит к неопределенному поведению.Вы должны либо сделать его static, либо выделить его malloc.

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