字符串反向没有新数组

时间:2010-03-19 05:54:35

标签: c string arrays

嗨,任何人都可以告诉我这个错误吗?

#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]);
    }
}

2 个答案:

答案 0 :(得分:5)

问题在于以下几点:

*first=a[0];
*second=a[7];

我认为你想要的是让firstsecond指向正确的元素,即:

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未初始化,因此您将指定无效内存。