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/