我正在编写一个非常简单的字符串反转函数,
void reverse(char *data) {
int length = 0,i;
char *temp,temp1[100];
temp = data;
length = strlen(temp);
printf("length %d\n", length);
for(i=length-1; i>=0; i--) {
temp1[i] = *temp;
printf("data[%d] = %c\n",i,temp1[i]);
printf("%c\n",*temp);
temp++;
}
temp1[length] = '\0';
printf("data %s\n", temp1);
//strcpy(data,temp1); // works even outside this function, offcourse it must
data = temp1; //works inside this function, but not outside this function
printf("data %s\n", data);
}
int main()
{
int length1 = 0;
char data1[100] = "I am megharaj from india";
printf("data1 %s\n", data1);
reverse(data1);
printf("reversed\n");
printf("data1 %s\n", data1);
return 0;
}
数据 = temp1; 这适用于反向功能,但不适用于主要功能。是的,这是默认设置,所以一旦它出现在函数之外,它就不会出现在堆栈中,但是为什么在主函数中 data1 打印字符串“我是来自印度的 megharaj”,我期待它打印垃圾值,因为我有一些东西已分配并且不再存在,因此它必须打印垃圾值。为什么它保留其先前的地址。