我编写了一个更复杂的程序,但我将问题缩小到以下问题:为什么这个程序打印的是垃圾而不是 hzllo?我使用调试器跟踪了 temp 和 p 的值和内存地址,它正确地从 foo 函数返回,并且由于我不理解打印垃圾的原因。
void foo(char **str) {
char temp[79];
strcpy_s(temp,79,*str);
*(temp + 1) = 'z';
*str = temp;
}
void main() {
char *p = (char*) malloc(79 * sizeof(char));
p = "hello";
foo(&p);
printf("%s", p);
}