嗨,任何人都可以告诉我这个错误吗?
#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]);
}
}
答案 0 :(得分:5)
问题在于以下几点:
*first=a[0];
*second=a[7];
我认为你想要的是让first
和second
指向正确的元素,即:
first = &a[0]; // address of the first element
second = &a[7]; // address of the eighth element
您所拥有的是将a[0]
的值分配给first
指向的地址,该地址未初始化。此外,您也可以在此处使用n - 1
而不是7,因此您不需要对大小进行硬编码。这些行:
*c=*first;
*first=*second;
*second=*c;
你看,指针c
也没有被初始化。你应该做的是没有c
作为指针:
char c;
然后像普通变量一样使用它:
c = *first;
*first = *second;
*second = c;
只是一个设计说明,你不需要计数器/ for-loop。相反,你知道你完成了second
是&lt; =到first
(也就是说,我们已经或已经越过了中途点):
while (second > first)
最后,通过那里的一些空间!您的代码非常简洁,难以阅读。不要害怕把事情搞清楚。
答案 1 :(得分:2)
*first=a[0];
指针first
未初始化,因此您将指定无效内存。