嗨,任何人都可以告诉我这个错误吗?
#include<stdio.h>
int main()
{
char a[]="abcdefgh";
int i=0;
int n=strlen(a);
char *first;
char *second;
char *c;
*first=a[0];
*second=a[7];
for(i=0;i<=n/2;i++)
{
*c=*first;
*first=*second;
*second=*c;
first++;
second--;
}
for(i=0;i<=7;i++)
{
printf("%c",a[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是这些问题:
*first=a[0];
*second=a[7];
Run Code Online (Sandbox Code Playgroud)
我认为你想要的是获得first并second指向正确的元素,即:
first = &a[0]; // address of the first element
second = &a[7]; // address of the eighth element
Run Code Online (Sandbox Code Playgroud)
你所拥有的是将值指定给a[0]指向的地址,该地址first未初始化.此外,您也可以n - 1在这里使用而不是7,因此您不需要硬编码大小.还有这些线:
*c=*first;
*first=*second;
*second=*c;
Run Code Online (Sandbox Code Playgroud)
你看,指针c还没有被初始化.你应该做的不是c指针:
char c;
Run Code Online (Sandbox Code Playgroud)
然后像普通变量一样使用它:
c = *first;
*first = *second;
*second = c;
Run Code Online (Sandbox Code Playgroud)
只是一个设计说明,你不需要计数器/ for-loop.相反,你知道你已经完成了second<= to first(也就是说,我们已经或已经越过了中途点):
while (second > first)
Run Code Online (Sandbox Code Playgroud)
最后,通过那里的一些空间!您的代码非常简洁,难以阅读.不要害怕把事情搞清楚.