#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char * reverse(char *string);
int main(int argc, char *argv[])
{
char array[10];
array[0] = 'a';
array[1] = 'b';
array[2] = 'c';
array[3] = 'd';
array[4] = 'e';
printf("1%s\n",array);
char *p = reverse(array);
printf("4%s\n",p);
printf("5%s\n",array);
}
char * reverse(char *string)
{
int size = strlen(string);
char reversed[size];
int i;
int j = 0;
for(i = size-1; i >= 0; i--)
{
reversed[j] = string[i];
j++;
}
printf("2%s\n",reversed);
string = reversed;
printf("3%s\n",string);
return reversed;
}
这段代码基本上只是初始化一个值数组并将其传递给一个反转这些值的方法。
我不确定这是否是执行任务的最佳方式,因为我是 C 中指针和数组的新手。
但真正的问题是:
任何人都可以在这一行中找出原因
printf("4%s\n",p);
如果去掉前面的'4',那么看起来是这样
printf("%s\n",p);
该行根本不会打印?
最佳答案
您在函数 reverse
中返回了一个指向局部变量 (reversed
) 的指针,问题实际上应该是:为什么它首先起作用?
。
这段代码 string = reversed;
将只复制指针,并再次指针的本地副本,因此它在函数外部没有任何影响。
要反转字符串,您不需要额外的内存 - 这可以就地完成。
关于c - C中奇怪的printf输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14361108/