无法访问地址处的内存

标签 c pointers

 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

我的任务是添加指针字符和数字,例如(“12.09.”+一些数字)。

如果你有任何方法,请提出建议。 我也尝试过内存分配,但它也没有用。 我发现加入指针字符串和 int 非常困难

最佳答案

strcpy(s,"12.09.");
strcat(s,(char*)(intptr_t)year);

这很可能没有按照您的想法行事。您将年份转换到一个地址并尝试访问它,这几乎在每种情况下都会调用未定义的行为。您应该看一下适合此任务的 snprintf 函数:

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

下一个问题是您试图返回一个局部数组,这也会导致未定义的行为。您必须使其成为 static 或使用 malloc 分配它。

关于无法访问地址处的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53584293/

相关文章:

c++ - 命名共享内存 : shm_open not providing the correct location

c++ - 为什么数组到指针的输出不相关

c - 随机数生成器生成错误的数字集

C 指向固定大小数组的现有指针

在 C 中检查环境变量是否为空

c - 根据客户类型排队进出

c++ - 函数参数中的 struct 关键字和常量正确性

c - 读取文本文件时与 fgetc 的差异

c - C 中的简单指针问题 - 错误值

c++如何获取指向另一个类中当前对象的指针?